如何用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
相关产品推荐
相关产品推荐

