python pdfminer зависает с некоторыми URL-адресами. кто-нибудь знает, почему?

#python #pdfminer

Вопрос:

Я успешно выполнил следующий код для довольно большого количества PDF-файлов, извлеченных из URL-адресов, однако несколько PDF-файлов приводят к тому, что PDFMiner застревает в цикле for. Я нашел 6 URL — адресов с PDF-файлами, которые вызывают эту проблему . Кто-нибудь знает, почему PDFMiner зависает в этих случаях?

 import requests
import io

from pdfminer3.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer3.converter import TextConverter
from pdfminer3.layout import LAParams
from pdfminer3.pdfpage import PDFPage

url = 'https://journals.asm.org/doi/pdf/10.1128/jb.00697-17'
# https://research-information.bristol.ac.uk/files/119649049/full_text_pdf_final_published_version_.pdf
# https://www.spandidos-publications.com/etm/13/3/1117/download
# https://research-information.bristol.ac.uk/files/155538863/full_text_pdf_final_published_version_.pdf
# https://www.research.ed.ac.uk/portal/files/166472001/fowler_etal_2020_philtranrsoca_a_chronology_of_global_air_quality.pdf
# https://periodicos.uff.br/confluencias/article/download/34693/2296

response_requests = requests.get(url, timeout=60)
binary_content = response_requests.content
content_type = response_requests.headers['content-type']
status_code = response_requests.status_code
actual_url = response_requests.url
library = 'requests'

error = "PDF Decode Error"
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
# Open the url provided as an argument to the function and read the content
#                        content = response.read()
# Cast to StringIO object
fp = io.BytesIO(binary_content)
interpreter = PDFPageInterpreter(rsrcmgr, device)
pagenos = set()
for page in PDFPage.get_pages(fp,
                              pagenos,
                              maxpages=0,
                              password='',
                              caching=True,
                              check_extractable=True):
    interpreter.process_page(page)
fp.close()
device.close()
content = retstr.getvalue().lower()