如何遍历Pandas DataFrame提取URL并调用Newspaper库提取文本
我来帮你完善这段代码,解决从(n×1)格式的DataFrame中提取URL文章文本的问题~
完整实现步骤
1. 先确保依赖库安装好
首先得装Newspaper3k(注意是newspaper3k,不是旧的newspaper包):
pip install newspaper3k
2. 带异常处理的完整代码
基于你的思路,补充了异常处理和行处理关键参数,避免单个URL出错导致整个任务卡壳:
from newspaper import Article import pandas as pd # 定义提取函数,加入异常捕获和下载状态检查 def newspaper_analysis(row): # 这里替换成你DataFrame中实际的URL列名,比如你的df列叫'link'就改成row['link'] url = row['url'] try: article = Article(url) article.download() # 检查是否成功下载到内容 if not article.download_state: return "提取失败:无法获取文章内容" article.parse() return article.text except Exception as e: # 捕获所有可能的错误,比如网络问题、无效URL等 return f"提取出错:{str(e)}" # 应用函数到DataFrame,axis=1表示按行处理每一条数据 df['text'] = df.apply(newspaper_analysis, axis=1)
3. 关键注意点
axis=1不能忘:你之前的代码没写这个参数,apply默认是按列处理,加上axis=1才会遍历每一行,把对应行的URL传给函数。- 异常处理很重要:网络波动、目标网站反爬、无效URL都可能导致失败,加了异常捕获后,单个URL出错不会中断整个任务,还能记录错误原因。
- URL列名要对应:如果你的DataFrame里存储URL的列不是
url,一定要把row['url']改成实际的列名。
优化建议
如果你的URL数量很多,可以试试这些提速/稳速的方法:
- 加请求延迟:导入
time库,在函数里加time.sleep(1),避免请求太频繁被目标网站封禁。 - 用多线程加速:可以用
swifter库来优化apply的执行速度,安装后替换成df['text'] = df.swifter.apply(newspaper_analysis, axis=1)。
内容的提问来源于stack exchange,提问作者sopzup
相关产品推荐
相关产品推荐

