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 как локальный файл, здесь. Подробнее о запуске программ в качестве подпроцессов здесь

Другие вопросы по тегам