Python — извлечение текста из веб-страницы PDF

Итак, я наткнулся на несколько сообщений, посвященных преобразованию PDF-файлов в HTML или преобразованию их в текст, однако все они касаются этого из файла, сохраненного на компьютере. Есть ли способ извлечь текст из PDF-страницы веб-страницы без загрузки самого файла PDF (поскольку я буду делать это для большого количества файлов, перебирая список URL-адресов)?

Мне также любопытно, какая библиотека лучше всего подходит для этого. pdfkit, pdf2txt, pdfminer и т. д.?

Вот пример веб-сайта в формате, с которым я буду иметь дело: http://www.arkansasrazorbacks.com/wp-content/uploads/2017/02/Miami-Ohio-Game-2.pdf


person rahlf23    schedule 02.08.2017    source источник
comment
Даже при просмотре PDF-файла в веб-браузере вы загружаете копию в свой локальный кеш. Ваш браузер просто по-прежнему показывает вам удаленный URL-адрес, даже если то, что вы просматриваете, было сохранено на диске в каталоге tmp вашего браузера. Почему бы просто не сделать то же самое?   -  person Matt Clark    schedule 03.08.2017


Ответы (1)


Вы можете загрузить файл как поток байтов с requests, обернув его io.BytesIO(), просто так:

import io

import requests
from pyPdf import PdfFileReader

url = 'http://www.arkansasrazorbacks.com/wp-content/uploads/2017/02/Miami-Ohio-Game-2.pdf'

r = requests.get(url)
f = io.BytesIO(r.content)

reader = PdfFileReader(f)
contents = reader.getPage(0).extractText().split('\n')

f — это объект, похожий на файл, который вы можете использовать так же, как вы открыли файл PDF. таким образом файл находится только в памяти и никогда не сохраняется локально.

Чтобы получить текст из файла PDF, вы можете использовать PyPdf.

person Dror Av.    schedule 02.08.2017
comment
Этот ответ также требует, чтобы вы импортировали io. Теперь, как мне извлечь текст из этого файлового объекта f? - person rahlf23; 03.08.2017
comment
Отредактировал ответ, чтобы дать более полный, спасибо @Milk за ссылку и вторую часть. - person Dror Av.; 03.08.2017
comment
@Dror Av., я использовал ваш фрагмент кода, чтобы помочь другому пользователю по этой ссылке stackoverflow.com/questions/67931135/. Спасибо. Это помогало помогать другим. - person Raky; 11.06.2021