Форум сайта python.su
0
Здравствуйте.
Озадачился выуживанием из pdf файлов больших таблиц. Попробовал использовать PyPDF2, pdfminer, tesseract (из textract) и tabula. Только табула позволяет выдернуть таблицу из pdf файла, но есть одна проблема - dataframe создается не правильно. Сливаются 2 и 3 колонки таблицы (их всего 3). Разделить их вручную через split не получится, потому что обе колонки могут содержат слова, разделенные пробелом. Для меня как раз эти колонки и имеют значение, а так как я работаю с большим количеством pdf файлов (тысячи) и большими таблицами (от ~300 до десятков тысяч ячеек) мне крайне необходимо процесс автоматизировать, чтобы иметь возможность выдергивать нужные ячейки из разных строк. Я насколько смог проанализировал список атрибутов датафрейма отсюда https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html
Попробовал экспортировать в json, csv, excel, html. Экспорт в эти форматы сохраняет слияние 2 и 3 колонки. Может кто-нибудь подсказать способ экспорта таблицы с сохранением форматирования?
Использую python 3.7 и последние версии указанных модулей. Если это имеет значение, судя по информации о pdf файлах, они созданы с помощью itext (java).
Вариант изучить java, чтобы работать с этими файлами, буду рассматривать только в крайнем случае… Хотелось все таки на уже знакомом и родном питоне решить задачу.
Пример pdf файла прикреплен.
Отредактировано justice (Сен. 14, 2018 09:03:42)
Прикреплённый файлы:
1155958008865_996518477539169.pdf (98,4 KБ)
Офлайн
Офлайн
но имхо вы пытаетесь фарш перекрутить на мясо. такие данные надо искать в html/json/xml форматах искать
для вашего примера - первая ссылка в яндекс
#!/usr/bin/env python3 import requests if __name__=="__main__": ogrn="1155958008865" url= "https://www.rusprofile.ru/egrul?ogrn=" + ogrn headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'} r = requests.get(url,headers=headers) fname = ogrn +'.html' f = open(fname,'w') print (r.text,file = f) f.close()
Офлайн
0
vic57, спасибо Вам большое за ответ. Жаль, что через pdftotext не получиться вытащить полноценную таблицу, но с результатом тоже можно работать, благо номера строк остаются и как-то накостылить выдергивание информацию между предыдущим и следующим номером я сумею.
Касательно реквеста информации с rusprofile, я с таким способом знаком, но применять его рискованно. Хоть там и написано, что база обновляется ежедневно, но никто в конечном итоге не отвечает за достоверность и свежесть информации. Надежнее и спокойнее вытаскивать информацию с pdf'ов ФНС.
Офлайн