You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中获取在线PDF文件响应数据并解析字节对象

解决Requests获取PDF返回字节对象无法解码的问题

嘿,我来帮你搞定这个问题!你现在遇到的情况很正常——因为PDF本身是二进制文件,不是纯文本格式,直接对response.content(字节对象)进行解码操作肯定会失败,里面包含大量非文本的二进制数据,没法直接转成字符串。

下面分两种常见需求给你解决方案:

需求1:把PDF保存到本地

如果只是想把这份PDF下载下来保存到电脑上,直接将字节内容写入文件即可,注意要用二进制写入模式(wb):

import requests

url = "http://imdagrimet.gov.in/sites/default/files/daas_bulletin/District%20Advisory%20patna_17.pdf"
response = requests.get(url)

# 检查请求是否成功
if response.status_code == 200:
    # 写入本地文件
    with open("Patna_District_Advisory.pdf", "wb") as pdf_file:
        pdf_file.write(response.content)
    print("PDF已成功保存!")
else:
    print(f"请求失败,状态码:{response.status_code}")

需求2:提取PDF里的文本内容

如果想直接获取PDF中的文字信息,需要用到专门的PDF解析库,比如PyPDF2或者pdfplumber(后者对复杂格式的PDF支持更好)。这里以PyPDF2为例:

  1. 先安装库:
pip install PyPDF2
  1. 编写代码提取文本:
import requests
from PyPDF2 import PdfReader
from io import BytesIO

url = "http://imdagrimet.gov.in/sites/default/files/daas_bulletin/District%20Advisory%20patna_17.pdf"
response = requests.get(url)

if response.status_code == 200:
    # 将字节内容转换为可读取的文件对象
    pdf_stream = BytesIO(response.content)
    pdf_reader = PdfReader(pdf_stream)
    
    # 遍历所有页面提取文本
    full_text = ""
    for page_num, page in enumerate(pdf_reader.pages, 1):
        page_text = page.extract_text()
        if page_text:
            full_text += f"--- 第{page_num}页内容 ---\n{page_text}\n\n"
    
    print(full_text)
else:
    print(f"请求失败,状态码:{response.status_code}")

补充说明

如果这份PDF是扫描件(图片格式的PDF),上面的方法没法提取文本,这时候需要用到OCR工具,比如pytesseract结合PIL来识别图片中的文字,不过步骤会更复杂一点,需要先安装Tesseract OCR引擎和对应的Python库。

内容的提问来源于stack exchange,提问作者anny

火山引擎 最新活动