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

Github Actions中Newspaper3k的Article.parse()无法正常工作求助

Github Actions中Newspaper3k的Article.parse()方法失效问题解决

问题背景

在私有仓库中使用GitHub Actions运行Python脚本时,Newspaper3k包的Article.parse()方法无法执行,其余代码(包括article.download())均正常运行,且本地环境测试无问题,怀疑是否与GitHub文件访问机制有关。

用到的GitHub Actions配置

build:
  runs-on: ubuntu-latest

  steps:
    - name: checkout repo content
      uses: actions/checkout@v3 # checkout the repository content to github runner.
    - name: setup python
      uses: actions/setup-python@v4
      with:
        python-version: '3.10' #install the python needed
        cache: 'pip'
  
    - name: install python packages
      run: |
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

    - name: execute py script # run file
      env: 
        WORDPRESS_USER: ${{ secrets.WORDPRESS_USER }}
        WORDPRESS_PASSWORD: ${{ secrets.WORDPRESS_PASSWORD }}
      run: |
        python main.py

涉及的Python函数

def generate_article_summary(supplied_links):
    summary_list = ""
    for news_article in supplied_links[:5]:
        try:
            url = news_article
            article = Article(url, config=config)
            article.download()
            article.parse()
            article.nlp()
        except:
            summary_list = summary_list + "\n"
            pass

        summary_list = summary_list + "\n" + article.summary

    return summary_list

可能原因及解决方案

1. 系统依赖缺失(最常见)

Newspaper3k在Ubuntu环境下需要额外的底层系统依赖,本地环境可能已安装,但GitHub Actions的ubuntu-latest镜像默认没有配置。

解决方法:在安装Python包的步骤前,添加系统依赖安装步骤:

- name: install system dependencies
  run: |
    sudo apt-get update && sudo apt-get install -y libxml2-dev libxslt-dev libjpeg-dev zlib1g-dev

这些依赖是Newspaper3k解析HTML结构、处理图片资源的必要组件,缺失会直接导致parse()方法执行失败。

2. 异常捕获过于宽泛,隐藏错误细节

当前代码用except:捕获所有异常但不输出具体信息,无法定位parse()失败的真实原因(比如HTML结构异常、编码问题等)。

解决方法:修改异常处理逻辑,打印错误详情:

def generate_article_summary(supplied_links):
    summary_list = ""
    for news_article in supplied_links[:5]:
        try:
            url = news_article
            article = Article(url, config=config)
            article.download()
            article.parse()
            article.nlp()
            summary_list = summary_list + "\n" + article.summary
        except Exception as e:
            # 错误信息会输出到GitHub Actions日志中
            print(f"处理链接 {url} 失败: {str(e)}")
            summary_list = summary_list + "\n"

    return summary_list

重新运行Actions后,可在日志中查看具体错误,针对性解决问题。

3. 目标网站反爬限制

虽然download()成功,但部分网站会对GitHub Runner的IP段进行反爬拦截,导致下载的HTML内容不完整或被篡改,进而引发parse()失败。

解决方法:给Newspaper3k配置浏览器请求头,模拟正常访问:

from newspaper import Config

# 配置请求头
config = Config()
config.browser_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'
# 可添加超时配置避免长时间等待
config.request_timeout = 10

使用该config初始化Article对象,降低被识别为爬虫的概率。

4. 私有仓库权限排除

私有仓库的权限设置不会影响脚本内部的文件访问或第三方包调用,只要能正常checkout代码,就与私有仓库属性无关,无需额外排查。

验证步骤

  1. 优先添加系统依赖安装步骤,重新运行Actions;
  2. 若问题仍存在,修改异常处理逻辑打印错误信息,根据日志定位具体问题;
  3. 必要时添加请求头配置模拟浏览器访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:25:42