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

如何用Python处理DataFrame中PDF链接:下载、保存并提取文本存新列

批量处理DataFrame中PDF链接实现代码

你的示例数据中包含docx、xlsx等非PDF格式链接,代码中已加入格式过滤逻辑,仅处理PDF链接避免报错。

前置依赖确认

确保已安装所需库:

pip install pandas textract

注意:textract提取PDF依赖poppler工具,Windows/macOS/Linux需提前安装对应poppler组件

完整实现代码

import pandas as pd
import urllib.request
import os
import textract

# -------------- 可调整参数 --------------
# PDF本地保存文件夹,不存在会自动创建
SAVE_FOLDER = "./pdf_downloads"
# 是否提取完文本后删除本地PDF文件,True=删除,False=保留
DELETE_AFTER_EXTRACT = False
# ---------------------------------------

# 创建保存文件夹
os.makedirs(SAVE_FOLDER, exist_ok=True)

# 下载函数,加入异常捕获避免单个链接出错中断整体流程
def download_pdf(download_url, save_path):
    try:
        response = urllib.request.urlopen(download_url, timeout=30)
        with open(save_path, 'wb') as f:
            f.write(response.read())
        return True
    except Exception as e:
        print(f"下载失败 {download_url}: {str(e)}")
        return False

# 文本提取函数,加入异常捕获和编码兼容处理
def extract_pdf_text(pdf_path):
    try:
        text = textract.process(pdf_path).decode('utf-8', errors='ignore')
        return text.strip()
    except Exception as e:
        print(f"文本提取失败 {pdf_path}: {str(e)}")
        return ""

# ---------------- 主逻辑 ----------------
# 假设你的原DataFrame变量名为df,存储链接的列名为URL
# 新增存储PDF文本的列
df['pdf_text'] = ""

for idx, row in df.iterrows():
    url = row['URL']
    # 过滤非PDF链接
    if not url.lower().endswith('.pdf'):
        df.at[idx, 'pdf_text'] = "非PDF文件,未提取文本"
        continue
    
    # 生成本地保存文件名,用行索引避免重名
    pdf_save_path = os.path.join(SAVE_FOLDER, f"{idx}.pdf")
    
    # 下载PDF
    download_success = download_pdf(url, pdf_save_path)
    if not download_success:
        df.at[idx, 'pdf_text'] = "PDF下载失败"
        continue
    
    # 提取文本并存入DataFrame
    pdf_text = extract_pdf_text(pdf_save_path)
    df.at[idx, 'pdf_text'] = pdf_text
    
    # 按需删除本地PDF文件
    if DELETE_AFTER_EXTRACT:
        os.remove(pdf_save_path)

# 处理完成后可查看结果
print(df[['URL', 'pdf_text']])

代码说明

  • 所有操作都加了异常捕获,单个文件下载/提取失败不会中断整个批量流程,失败原因会打印在控制台
  • 自动过滤非PDF格式的链接,避免docx、xlsx等文件处理报错
  • 支持选择是否保留下载的本地PDF文件,不需要保留就把DELETE_AFTER_EXTRACT设为True即可
  • 文本提取时做了编码兼容处理,避免特殊字符导致报错

内容的提问来源于stack exchange,提问作者Fatima El Mansouri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:01