You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从DataFrame的URL列读取在线PDF并提取文本至新列

批量提取DataFrame中URL对应的PDF文本到新列

没问题,我来帮你搞定这个需求——从DataFrame的URL列批量提取PDF文本到新列。下面是具体的实现方案,考虑到500+行的规模和可能出现的异常(比如链接失效、PDF无法解析),我会给出稳健的代码:

第一步:安装必要的库

你需要用到几个Python库来处理DataFrame、HTTP请求和PDF文本提取:

pip install pandas requests pdfplumber
# 如果想加速批量处理,可以额外安装swifter
pip install swifter

第二步:核心实现代码

import pandas as pd
import requests
import pdfplumber
from io import BytesIO

# 定义PDF文本提取函数,包含异常处理
def extract_pdf_text(url):
    try:
        # 模拟浏览器请求,避免被网站拦截
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
        }
        # 发送请求获取PDF内容
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()  # 检查请求是否成功
        
        # 用pdfplumber读取PDF并提取文本
        with pdfplumber.open(BytesIO(response.content)) as pdf:
            text = ""
            for page in pdf.pages:
                page_text = page.extract_text()
                if page_text:  # 避免空页报错
                    text += page_text + "\n"
        return text.strip()
    
    except Exception as e:
        # 捕获所有异常,返回错误信息方便后续排查
        return f"提取失败: {str(e)}"

# 假设你的DataFrame名为df,URL列名为"URL"
# 示例DataFrame(替换成你自己的DataFrame即可)
data = {
    "URL": ["https://www.occ.gov/static/enforcement-actions/ea2018-001.pdf"]
}
df = pd.DataFrame(data)

# 应用函数到URL列,生成新列「PDF data」
# 如果数据量很大(500+行),可以用swifter加速(自动选择并行/串行)
# df["PDF data"] = df["URL"].swifter.apply(extract_pdf_text)
df["PDF data"] = df["URL"].apply(extract_pdf_text)

# 查看结果
print(df.head())

关键细节说明

  • 异常处理:函数里捕获了请求超时、链接失效、PDF解析失败等各种异常,返回错误信息,不会导致整个批量任务中断
  • 请求头模拟:添加User-Agent模拟浏览器请求,很多网站会拦截无标识的爬虫请求
  • PDF文本提取:用pdfplumber比PyPDF2更准确,能更好地处理复杂排版的PDF
  • 性能优化:如果500+行处理速度慢,安装swifter后替换成带swifter.apply的代码,它会自动根据数据量选择并行处理,提升效率

注意事项

  1. 大文本存储:提取的PDF文本可能非常长,pandas完全支持存储大文本,但如果后续要导出到Excel,注意Excel单元格有字符限制(约32767字符),可以选择导出为CSV或者JSON格式
  2. 反爬限制:如果频繁请求被网站封禁,可以在函数里添加time.sleep(1)(需要导入time库),每次请求后暂停1秒,降低请求频率
  3. 本地缓存:如果需要重复处理,可以把已提取的PDF文本本地缓存起来,避免重复请求相同链接

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:46:59