Python中如何获取在线PDF且不保存到本地直接转为字符串
实现方案
全程不需要把PDF保存到本地,核心是用io.BytesIO把requests拉取到的PDF二进制内容封装为内存中的类文件对象,直接传给PDF解析库提取文本即可。
步骤1:安装依赖
pip install requests pypdf
pypdf是纯Python实现的PDF解析库,不需要额外安装系统级依赖。
步骤2:完整可运行代码
import io import requests from pypdf import PdfReader def online_pdf_to_text(url: str) -> str: resp = requests.get(url, timeout=30) # 请求失败直接抛出HTTP错误,避免后续解析无效内容 resp.raise_for_status() # 将二进制响应封装为内存文件,全程无本地磁盘写入操作 with io.BytesIO(resp.content) as mem_pdf: reader = PdfReader(mem_pdf) text_content = [] # 逐页提取文本并拼接 for page in reader.pages: page_text = page.extract_text() if page_text: text_content.append(page_text) return "\n".join(text_content) # 调用示例 if __name__ == "__main__": url = 'xyzzy.org/g.pdf' result = online_pdf_to_text(url) # 对应示例场景会返回"I love programming." print(result)
补充说明
- 如果遇到排版复杂的PDF出现文本提取不全、乱码问题,可以替换为
pdfplumber库做解析,内存流处理逻辑完全不变,只需要把PdfReader替换为pdfplumber.open(mem_pdf),再按pdfplumber的接口提取页面文本即可,对复杂版式的提取精度更高。 - 可以根据需求给requests添加请求头、代理、重试逻辑,适配有反爬限制的在线PDF资源场景。
- 所有解析操作都在内存中完成,不会在本地磁盘生成任何临时PDF文件。
内容的提问来源于stack exchange,提问作者chez93
相关产品推荐
相关产品推荐

