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

7xzttuei  于 2023-03-13  发布在  Python
关注(0)|答案(2)|浏览(153)

有没有办法从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语言

hsgswve4

hsgswve41#

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"
qoefvg9y

qoefvg9y2#

简短回答NO(非正常),较长回答MAYBE,但在受控设置中。
对于您的问题有三种类型的PDF,在共同的顺序非线性,线性,自定义流。和自定义流需要支付图书馆两端,所以让我们拒绝。
当你下载一个WEB线性化PDF文件的开始部分时,你会很快看到第一页,但是除非你把下载的文件保存为Zer0page.pdf,否则你不能很容易地查询该页
要使任何查看器能够查询页面,以便您需要下载完整的对象字典,它通常位于完全下载的pdf的末尾。
您的示例链接是最常见的类型,因此“第0页”地址存储在需要完整下载的文件末尾。请参见此处,并注意右侧滚动条的位置这是任何编辑器(如pyton extractor等)都能看到的PDF。所有用于阅读和提取的重要数据都在下载文件的末尾(无论是否存储到内存中)。正如你所看到的,对象可以有任何顺序,这里12在10和45之前(文件的根)在11之后,因此是第一页(在你的例子中,这里突出显示为10obj)可以是任何数字,并且很容易(有时是)成为最后下载的对象。通常,你不会看到第一页,直到完整的进度条在最后。

相关问题