tag*_*aga 3 python pdf beautifulsoup
我想从一个网站上的 PDF 文件中提取文本。该网站包含 PDF 文档的链接,但是当我单击该链接时,它会自动下载该文件。是否可以从该文件中提取文本而不下载它
import fitz # this is pymupdf lib for text extraction
from bs4 import BeautifulSoup
import requests
from io import StringIO
url = "https://www.blv.admin.ch/blv/de/home/lebensmittel-und-ernaehrung/publikationen-und-forschung/statistik-und-berichte-lebensmittelsicherheit.html"
headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
all_news = soup.select("div.mod.mod-download a")[0]
pdf = "https://www.blv.admin.ch"+all_news["href"]
#https://www.blv.admin.ch/dam/blv/de/dokumente/lebensmittel-und-ernaehrung/publikationen-forschung/jahresbericht-2017-2019-oew-rr-rasff.pdf.download.pdf/Jahresbericht_2017-2019_DE.pdf
Run Code Online (Sandbox Code Playgroud)
这是从 pdf 中提取文本的代码。下载文件后效果很好:
my_pdf_doc = fitz.open(pdf)
text = ""
for page in my_pdf_doc:
text += page.getText()
print(text)
Run Code Online (Sandbox Code Playgroud)
同样的问题是链接是否不会自动下载 pdf 文件,例如此链接:
"https://amsoldingen.ch/images/files/Bekanntgabe-Stimmausschuss-13.12.2020.pdf"
Run Code Online (Sandbox Code Playgroud)
我如何从该文件中提取文本
我也尝试过这个:
pdf_content = requests.get(pdf)
print(type(pdf_content.content))
file = StringIO()
print(file.write(pdf_content.content.decode("utf-32")))
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
Traceback (most recent call last):
File "/Users/aleksandardevedzic/Desktop/pdf extraction scrapping.py", line 25, in <module>
print(file.write(pdf_content.content.decode("utf-32")))
UnicodeDecodeError: 'utf-32-le' codec can't decode bytes in position 0-3: code point not in range(0x110000)
Run Code Online (Sandbox Code Playgroud)
这是使用 PyPDF2 的示例。
\n安装
\npip install PyPDF2
import requests, PyPDF2\nfrom io import BytesIO\n\nurl = 'https://www.blv.admin.ch/dam/blv/de/dokumente/lebensmittel-und-ernaehrung/publikationen-forschung/jahresbericht-2017-2019-oew-rr-rasff.pdf.download.pdf/Jahresbericht_2017-2019_DE.pdf'\nresponse = requests.get(url)\nmy_raw_data = response.content\n\nwith BytesIO(my_raw_data) as data:\n read_pdf = PyPDF2.PdfFileReader(data)\n\n for page in range(read_pdf.getNumPages()):\n print(read_pdf.getPage(page).extractText())\nRun Code Online (Sandbox Code Playgroud)\n输出:
\n' 1/21 Fad \\n\xc5\x92 24.08.2020\\n Bericht 2017\\n \xc5\x92 2019: \xc3\x96ffentliche Warnungen, \\nR\xc3\xbcckrufe und Schnellwarnsystem RASFF\\n '\nRun Code Online (Sandbox Code Playgroud)\n