无需下载即可使用 Python 3 从 URL 获取 PDF 的内容

问题描述 投票:0回答:2

有没有办法从 URL 读取 PDF 文档的第一页而不保存到本地?我需要阅读网站上的 PDF 文档请求。 在下文中,您将找到我尝试执行的代码。该代码适用于某些 http URL,但不适用于其他 URL。

import urllib3
urllib3.disable_warnings()

with urllib3.PoolManager() as http:
    r = http.request('GET', url) 
    with io.BytesIO(r.data) as f:
        reader = PyPDF2.PdfFileReader(f)
        contents = reader.getPage(0).extractText().split('\n') 

这是我使用以下 url 运行此代码时的输出:“http://www.ain.gouv.fr/IMG/pdf/aprejetdae20210709enligne.pdf”

['', '', '', '', '˘ˇˆ', '˙˝', '˚', '!˛', '˛ ', '', 'ˆ˙ˆ#$%', '$', "#'˙", '( ', '', '', '', '˘ˇˆˇ˙', '˝˘ˇˆˇ˛˚', '˜', ' !"ˇ#ˆ"!$%!"ˇ#&', "ˇ'", '˜', '(', '!"ˇ#ˆˇ!$%!"ˇ#)&*', '˜', '((ˇˇ%!"!ˇ', '+,+-', '(./', '01(', '!,(2$˙', '""˚345', '6', '7((&(1(8', '1ˆ(1((˛.', '˜', '$!"!ˇ(1*(1', '1', ',1˝/9,', '/1(', '˜', '\'%!"!ˇ(1(1', '1,1˝/9,(6', '˜', ')%:(()', '˜', '+,+-(.$!"!ˇ()', '˜', '(!˙%!"!ˇ()5,5,((', '=( ...

Python版本:Python 3.10.0

python-3.x pdf https urllib3 httplib2
2个回答
0
投票

LlamaIndex (GPT Index) 有一个使用 PyPDF2 从文件中读取 PDF 页面的方法。可以创建一个新方法,类似于那个方法,它将字节发送到 PyPDF 而不是从文件读取然后只读取 for 循环中的第一页。

方法链接:https://github.com/jerryjliu/gpt_index/blob/c9ee3eb18226c985884f0b1e452207a1c8669b5a/gpt_index/readers/file/docs_parser.py#L12

修改方法:

response = requests.get("http://www.ain.gouv.fr/IMG/pdf/aprejetdae20210709enligne.pdf")
pdf_io_bytes = io.BytesIO(response.content)
text_list = []
pdf = PyPDF2.PdfReader(pdf_io_bytes)

num_pages = len(pdf.pages)

for page in range(num_pages):
    page_text = pdf.pages[page].extract_text()
    text_list.append(page_text)
text = "\n".join(text_list)

首页返回正文:

"Direction des collectivités\net de l’appui territorial\nBureau de l'aménagement, de l'urbanismeet des installations classéesRéférences : FDS \nArrêté préfectoral portant rejet de la demande d’autorisation environnementale\nd’exploiter une installation de production d'électricité utilisant l'énergie mécanique du vent \npar la société SAS Parc éolien d’Echallon sur la commune d’Echallon\nLa Préfète de l'Ain,\nChevalier de la légion d’honneur,\nVUle code de l’environnement et notamment son titre VIII  - livre I, et en particulier ses articles L.181-9\net  R.181-34 ;\nVUl’ordonnance n° 2017-80 du 26 janvier 2017 relative à l’autorisation environnementale, et notamment\nson article 15 ;\nVUle décret n° 2017-81 du 26 janvier 2017 relatif à l'autorisation environnementale  ;\nVU la demande d’autorisation environnementale présentée en date du 11 janvier 2021 par la SAS Parc\néolien d’Echallon dont le siège social est situé 2 rue André Bonin, 69  004 LYON en vue d’obtenir\nl’autorisation d’exploiter une installation de production d’électricité à partir de l’énergie mécanique du\nvent et regroupant 8 aérogénérateurs et 3 postes de livraison sur la commune d’Echallon  ;\nVUle rapport du 6 avril 2021 de la direction régionale de l’environnement, de l'aménagement et du\nlogement Auvergne-Rhône-Alpes , chargée de l’inspection de l’environnement  ;\nVUle rapport du 5 juillet 2021 de la direction régionale de l’environnement, de l’aménagement et du\nlogement Auvergne-Rhône-Alpes établi suite au contradictoire  ;\nVUla notification au demandeur du projet d’arrêté préfectoral  ;\nVUle courrier de la SAS Parc éolien d’Echallon reçu le 6 mai 2021 en préfecture  ;\nVUla tenue de la réunion en date du 29 juin 2021 en sous-préfecture de NANTUA présidée par\nMadame la sous-préfète de Gex et Nantua  ;\nVUles observations présentées par le demandeur sur le projet d’arrêté lors de la réunion du 29 juin\n2021 ;\nCONSIDÉRANT la demande déposée le 11 janvier 2021  ;\nCONSIDÉRANT que le projet s’inscrit dans un secteur à haute valeur écologique (classement en ZNIEFF\nde type I et  2, zone de présence « de type II » du Grand Tétras, proximité immédiate d’un arrêté de\nprotection de biotope et de zones Natura 2000) ;\nCONSIDÉRANT que la préservation des milieux naturels concernés (hêtraie-sapinière de montagne) est\nnécessaire  au  maintien,  dans  un  état  de  conservation  favorable,  du  cortège  d’espèces  protégées\nassociées (notamment avifaune de montagne dont Chouette de Tengmalm, Chouette chevêchette, Grand\nTétras, rapaces dont Circaète Jean-le-Blanc, Aigle royal et Milan royal, chiroptères dont Minioptère de\nSchreibers) ;\n45 Avenue Alsace-LorraineQuartier Bourg Centre  - CS 80400 - 01012 BOURG EN BRESSE CEDEX Tél. 04.74.32.30.00 - Site internet : www.ain.gouv.fr"

0
投票

简短回答否(通常不),较长的回答可能但在受控环境中。

对于您的问题,PDF 分为三种类型,常见顺序为非线性化、线性化、自定义流式。并且自定义流媒体需要为两端的图书馆付费,所以让我们拒绝吧。

当您下载 WEB 线性化 PDF 的开头时,您会很快看到第一页,但除非您将下载另存为 Zer0page.pdf,否则无法轻松查询该页面

为了让任何查看者能够查询页面,您需要下载完整的对象字典,它通常位于完全下载的 pdf 的末尾。

您的示例链接是最常见的类型,因此“第 0 页”地址存储在需要完整下载的文件末尾。 看这里,并注意右边的滚动条位置这是任何编辑器看到的 PDF,例如 pyton 提取器等。所有用于阅读和提取的重要数据都在下载文件的末尾(是否存入内存)。如您所见,对象可以按任何顺序排列,这里 12 在 10 之前,45(文件的根目录)在 11 之后,因此第一页(在您的示例中,突出显示为 1 0 obj)可能是任何数量并且很容易成为(有时是)最后下载的对象。通常,在完整的进度条结束之前,您不会看到第一页。

© www.soinside.com 2019 - 2024. All rights reserved.