Python - вытащить PDF-файлы с веб-страницы и конвертировать в HTML
Моя цель - создать скрипт на языке Python, который будет обращаться к определенным веб-страницам, извлекать все PDF-файлы на каждой странице с определенным словом в имени файла, преобразовывать их в HTML / XML, а затем просматривать HTML-файлы для чтения данных из PDF-файлов. столы.
До сих пор я импортировал mechanize (для просмотра страниц / поиска файлов pdf), и у меня есть pdfminer, однако я не уверен, как использовать его в скрипте для выполнения тех же функций, что и в командной строке.
Какая группа библиотек наиболее эффективна для выполнения моей задачи, и как бы вы порекомендовали подходить к каждому шагу? Я извиняюсь, если это слишком специфично для stackru, но у меня возникли проблемы с использованием поисков Google и разреженной документации, чтобы собрать воедино, как кодировать это. Спасибо!
РЕДАКТИРОВАТЬ: Итак, я решил пойти с Scrapy на этом. Пока мне это очень нравится, но теперь у меня новый вопрос. Я определил класс PDFItem () для использования с моим пауком с полями title и url. У меня есть селектор, который захватывает все ссылки, которые я хочу, и я хочу пройти по этим ссылкам и создать PDFItem для каждой из них. Вот код, который я имею ниже:
links = sel.xpath('//a[contains(@href, "enforcementactions.pdf") and contains(@class, "titlelink")]')
item = PDFItem()
for link in links:
item['title'] = link.xpath('/text()')
item['url'] = URL + link.xpath('@href').extract()[0]
Строка URL работает хорошо, но я не знаю, как сделать то же самое для заголовка. Я думаю, я мог бы просто выполнить запрос в верхней части, но добавив / text () в конец селектора, но это кажется чрезмерным. Есть ли лучший способ просто пройти через каждый объект ссылки в массиве ссылок и получить текст и значение href?
2 ответа
Я бы использовал Scrapy. Scrapy - лучший инструмент для сканирования всего сайта и создания списка всех PDF-ссылок. Такой паук очень легко написать. Вам определенно не нужен Механизировать.
После этого я бы использовал Poppler для преобразования каждого PDF в HTML. Это не модуль Python, но вы можете использовать команду pdftohtml
, По моему опыту, у меня были лучшие результаты с Poppler, чем PDFMiner.
Редактировать:
links = sel.xpath('//a[contains(@href, "enforcementactions.pdf") and contains(@class, "titlelink")]')
for link in links:
item = PDFItem()
item['title'] = link.xpath('text()').extract()[0]
item['url'] = URL + link.xpath('@href').extract()[0]
Для просмотра и поиска PDF-ссылок на веб-странице достаточно иметь библиотеку URL. Mechanize
Как следует из документации, используется для автоматизации взаимодействия с веб-сайтом. Учитывая ваше описание, я нахожу это ненужным.
PDFMiner
"s pdf2txt.py
преобразует PDF в HTML. Поэтому вам нужно вызвать эту программу как подпроцесс в вашем скрипте для создания выходных HTML.
Таким образом, вам понадобятся библиотеки HTTP, такие как Requests и PDFMiner.
Рабочий процесс вашего скрипта будет примерно таким:
import os
import requests
from subprocess import Popen
...
r = requests.get(<url-which-has-pdf-links>)
# Do a search for pdf links in r.text
...
for pdf_url in pdf_links:
# get the PDF content and save it to a local temp file
...
# Build the command line parameters, the way pdf2txt expects
# Invoke the PDFMiner's pdf2txt on the created file as a subprocess
Popen(cmd)
Подробнее об использовании Requests
чтобы сохранить файл PDF как локальный файл, здесь. Подробнее о запуске программ в качестве подпроцессов здесь