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代码,就与私有仓库属性无关,无需额外排查。
验证步骤
- 优先添加系统依赖安装步骤,重新运行Actions;
- 若问题仍存在,修改异常处理逻辑打印错误信息,根据日志定位具体问题;
- 必要时添加请求头配置模拟浏览器访问。
内容的提问来源于stack exchange,提问作者Dave C
相关产品推荐
相关产品推荐

