Loading...

文章背景图

newspaper3k:一行代码从新闻 URL 抽出标题正文作者的 Python 库

2026-11-06
0
- 字
- 分钟
|

newspaper3k:一行代码从新闻 URL 抽出标题正文作者的 Python 库

一、项目简介与定位

newspaper3k 是一个 Python 新闻文章提取库,受 requests 简洁 API 风格启发,底层用 lxml 做高性能解析。给定一个新闻 URL,它能自动下载页面、解析出标题、作者、发布时间、正文、封面图、视频链接,并可选地通过 NLP 抽出关键词与摘要。它不是一个"爬虫框架",而是一个单篇文章正文提取器:你负责找 URL,它负责把正文干净地拿出来。

官方 README 明确:在 Python 3 上必须安装 newspaper3k,而不是老的 newspaper(那是 Python 2 时代的包,已废弃)。

二、开源协议

newspaper3k 采用 MIT License,其中部分解析代码源自 python-goose,详见仓库中的 GOOSE-LICENSE.txt。

三、官方仓库链接

说明:任务清单原写 newspaper-dev/newspaper,该路径在 GitHub 上已 404;官方仓库位于 codelucas/newspaper,发布到 PyPI 的包名为 newspaper3k。

四、前置要求

根据官方 README:

  • Python 3(README 明确:"Newspaper is a Python3 library")
  • 系统级依赖(Debian/Ubuntu):
    • python3-pip
    • python-dev(提供 Python.h)
    • libxml2-dev libxslt-dev(lxml 编译需要)
    • libjpeg-dev zlib1g-dev libpng12-dev(PIL 识别 JPEG 需要;如 libpng12-dev 装不上,改用 libpng-dev)
  • NLP 语料需要额外下载一次(见安装章节)

五、安装部署

官方 README 给出的标准安装命令:

pip3 install newspaper3k

官方警告(README 原文):

On python3 you must install newspaper3k, not newspaper. newspaper is our python2 library.

也就是说,千万别 pip3 install newspaper。

5.1 Debian / Ubuntu 完整流程

sudo apt-get install python3-pip python-dev
sudo apt-get install libxml2-dev libxslt-dev
sudo apt-get install libjpeg-dev zlib1g-dev libpng12-dev   # 装不上就换 libpng-dev

pip3 install newspaper3k

# 下载 NLP 相关语料(用于 article.nlp())
curl https://raw.githubusercontent.com/codelucas/newspaper/master/download_corpora.py | python3

5.2 macOS(Homebrew)

brew install libxml2 libxslt
brew install libtiff libjpeg webp little-cms2

pip3 install newspaper3k
curl https://raw.githubusercontent.com/codelucas/newspaper/master/download_corpora.py | python3

六、最小示例代码

6.1 抽取单篇文章

官方 README 示例:

from newspaper import Article

url = 'http://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/'
article = Article(url)

article.download()      # 下载 HTML
# article.html           # 原始 HTML 字符串

article.parse()         # 解析
article.authors         # ['Leigh Ann Caldwell', 'John Honway']
article.publish_date    # datetime.datetime(2013, 12, 30, 0, 0)
article.text            # 正文纯文本
article.top_image       # 封面图 URL
article.movies          # 文章中出现的视频 URL 列表

article.nlp()           # 需要先下载 NLP 语料
article.keywords        # 关键词列表
article.summary         # 自动摘要

完整可运行脚本:

from newspaper import Article

url = "https://example.com/news/12345.html"
a = Article(url, language="zh")   # 中文文章指定 language="zh"
a.download()
a.parse()

print("标题:", a.title)
print("作者:", a.authors)
print("发布时间:", a.publish_date)
print("正文:\n", a.text)
print("封面图:", a.top_image)

6.2 按站点批量发现文章

import newspaper

cnn_paper = newspaper.build("http://cnn.com", language="en")

for article in cnn_paper.articles:
    print(article.url)

for category in cnn_paper.category_urls():
    print(category)

# 抽取其中一篇
art = cnn_paper.articles[0]
art.download()
art.parse()
art.nlp()

6.3 直接从已有 HTML 提取正文

import requests
from newspaper import fulltext

html = requests.get("https://example.com/news/1.html").text
text = fulltext(html)
print(text)

6.4 多语言支持

官方 README 列出 40+ 种语言,包括 zh(中文)、en(英文)、ja(日文)、ko(韩文)、de、fr、ru、ar 等。不指定 language 时会自动猜测。

from newspaper import Article

a = Article("http://www.bbc.co.uk/zhongwen/simp/...", language="zh")
a.download()
a.parse()
print(a.title)
print(a.text[:200])

七、配置项

通过 newspaper.Config 调整行为:

from newspaper import Article, Config

config = Config()
config.request_timeout = 20
config.browser_user_agent = (
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
    "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
)
config.proxies = {
    "http":  "http://user:pass@host:port",
    "https": "http://user:pass@host:port",
}

article = Article("https://example.com/news/1.html", config=config)
article.download()
article.parse()

常用字段:request_timeout、browser_user_agent、proxies、number_threads、verbose。

八、常见问题

  1. pip3 install newspaper3k 在 Ubuntu 上报 lxml / Pillow 编译失败 先按 README 安装系统依赖:libxml2-dev libxslt-dev libjpeg-dev zlib1g-dev。

  2. article.nlp() 报 Resource not found: punkt 之类错误 说明 NLP 语料没下全,重新跑:

    curl https://raw.githubusercontent.com/codelucas/newspaper/master/download_corpora.py | python3
  3. 正文抽不出来或抽得很乱 新版反爬与自适应模板很多,newspaper3k 的启发式规则对部分站点失效。可改用 trafilatura、readability 等更现代的提取器作为兜底。

  4. 中文文章乱码或作者识别为空 显式传 Article(url, language="zh"),不要让它自动猜。

  5. 被目标站 403 通过 Config.browser_user_agent 设置真实浏览器 UA,必要时配合 Config.proxies。

九、与同类工具对比

  • vs. Scrapy / Colly:后两者是"全站爬虫框架",负责发现 URL、调度、去重;newspaper3k 只做"给定 URL → 抽正文"这一步,常作为爬虫流水线的最后一环。
  • vs. BeautifulSoup 手撸:BS 需要自己写选择器;newspaper3k 用启发式规则自动定位正文区,省去针对每个站点写规则的成本。
  • vs. trafilatura / readability-lxml:后两者更现代、维护更活跃;newspaper3k 的优势是开箱即带作者、发布时间、关键词、摘要,且中文文档与示例较多。

十、许可

本项目基于 MIT License 发布,部分代码源自 python-goose(见 GOOSE-LICENSE.txt)。

十一、责任使用声明

  • 抓取前遵守目标站点的 robots.txt 与服务条款,仅采集公开允许访问的文章。
  • 通过 Config.request_timeout 与合理的请求间隔控制节奏,不要对同一站点短时间内并发轰炸。
  • 不要绕过登录态、付费墙、验证码或其他访问控制去获取未授权内容。
  • 不批量采集、存储或再分发涉及个人隐私的数据。
  • 本库仅用于公开新闻文章的研究、归档与合法的商业情报分析,使用者自行承担合规责任。
  • 尊重原作者版权,抽出的正文、图片在二次发布时应注明来源并遵守相应许可协议。
评论交流

文章目录