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。
三、官方仓库链接
- 仓库:https://github.com/codelucas/newspaper
- 文档:https://newspaper.readthedocs.io/
- PyPI:https://pypi.org/project/newspaper3k/
说明:任务清单原写
newspaper-dev/newspaper,该路径在 GitHub 上已 404;官方仓库位于codelucas/newspaper,发布到 PyPI 的包名为newspaper3k。
四、前置要求
根据官方 README:
- Python 3(README 明确:"Newspaper is a Python3 library")
- 系统级依赖(Debian/Ubuntu):
python3-pippython-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, notnewspaper.newspaperis 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 | python35.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。
八、常见问题
pip3 install newspaper3k在 Ubuntu 上报 lxml / Pillow 编译失败 先按 README 安装系统依赖:libxml2-dev libxslt-dev libjpeg-dev zlib1g-dev。article.nlp()报Resource not found: punkt之类错误 说明 NLP 语料没下全,重新跑:curl https://raw.githubusercontent.com/codelucas/newspaper/master/download_corpora.py | python3正文抽不出来或抽得很乱 新版反爬与自适应模板很多,newspaper3k 的启发式规则对部分站点失效。可改用
trafilatura、readability等更现代的提取器作为兜底。中文文章乱码或作者识别为空 显式传
Article(url, language="zh"),不要让它自动猜。被目标站 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与合理的请求间隔控制节奏,不要对同一站点短时间内并发轰炸。 - 不要绕过登录态、付费墙、验证码或其他访问控制去获取未授权内容。
- 不批量采集、存储或再分发涉及个人隐私的数据。
- 本库仅用于公开新闻文章的研究、归档与合法的商业情报分析,使用者自行承担合规责任。
- 尊重原作者版权,抽出的正文、图片在二次发布时应注明来源并遵守相应许可协议。