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

如何遍历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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:36