Newspaper 一个能下载38种语言新闻文章的 Python 模块
Newspaper 是一个很棒的python库,用于提取和整理文章。
它有以下的优点:
多线程文章下载框架
识别新闻网址
从html提取文本
从html提取顶部图像
从html提取所有图像
从文本中提取关键字
自动提取摘要
自动提取作者
自动提取 Google 趋势词
下面是这个开源模块的安装和使用教程。
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。
如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.
此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南。
请选择以下任一种方式输入命令安装依赖:
1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip3 install newspaper3k
遇到任何安装问题,可以在本文下方留言框或Python实用宝典公众号上留言,也可以访问项目官网查看相关安装指南:
https://github.com/codelucas/newspaper
2.基本使用
Newspaper 中是以文章为对象实现各种操作的,比如下载指定新闻的HTML:
from newspaper import Article
url = 'http://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/'
# 根据url生成Article对象
article = Article(url)
# 下载文章
article.download()
# 文章的HTML
article.html
#'<!DOCTYPE HTML><html itemscope itemtype="http://...'
通过解析新闻和文章,你能获得此文章的作者、发布时间、摘要、顶部图像、所有图像、多媒体等:
"""
Python 实用宝典
《Newspaper — 一个能下载38种语言新闻文章的 Python 模块》
"""
# 解析文章
article.parse()
# 获取文章作者
article.authors
# ['Leigh Ann Caldwell', 'John Honway']
# 获取文章发布日期
article.publish_date
# datetime.datetime(2013, 12, 30, 0, 0)
# 获取文章文本
article.text
# 'Washington (CNN) -- Not everyone subscribes to a New Year's resolution...'
# 获取顶部图像
article.top_image
# 'http://someCDN.com/blah/blah/blah/file.png'
# 获取文章多媒体资源
article.movies
# ['http://youtube.com/path/to/link.com', ...]
除此之外,该模块还附带了 NLP 功能,你能用它来识别文章关键字并自动提取摘要:
# 使用 NLP 解析
article.nlp()
# 获取文章关键词
article.keywords
# ['New Years', 'resolution', ...]
# 获取文章摘要
article.summary
# 'The study shows that 93% of people ...'
你看,这个工具不无敌吗?它还能提取某个网站的所有新闻文章,比如我想提取CNN的新闻文章:
import newspaper
cnn_paper = newspaper.build('http://cnn.com')
for article in cnn_paper.articles:
print(article.url)
# http://www.cnn.com/2013/11/27/justice/tucson-arizona-captive-girls/
# http://www.cnn.com/2013/12/11/us/texas-teen-dwi-wreck/index.html
在此之上,你还能拿到CNN的其他新闻门户分类:
for category in cnn_paper.category_urls():
print(category)
# http://lifestyle.cnn.com
# http://cnn.com/world
# http://tech.cnn.com
# ...
许多中文媒体的文章下载也是支持的:
import newspaper
sina_paper = newspaper.build('http://www.sina.com.cn/', language='zh')
for category in sina_paper.category_urls():
print(category)
# http://health.sina.com.cn
# http://eladies.sina.com.cn
# http://english.sina.com
# ...
article = sina_paper.articles[0]
article.download()
article.parse()
print(article.text)
# 新浪武汉汽车综合 随着汽车市场的日趋成熟,
# 传统的"集全家之力抱得爱车归"的全额购车模式已然过时,
# 另一种轻松的新兴 车模式――金融购车正逐步成为时下消费者购
# 买爱车最为时尚的消费理念,他们认为,这种新颖的购车
# 模式既能在短期内
# ...
print(article.title)
# 两年双免0手续0利率 科鲁兹掀背金融轻松购_武汉车市_武汉汽
# 车网_新浪汽车_新浪网
从上面的例子你可以看到,你可以非常容易地提取中文文章,仅需要在Article的language参数中指定 'zh' :
"""
Python 实用宝典
《Newspaper — 一个能下载38种语言新闻文章的 Python 模块》
"""
from newspaper import Article
url = 'http://www.bbc.co.uk/zhongwen/simp/chinese_news/2012/12/121210_hongkong_politics.shtml'
a = Article(url, language='zh') # Chinese
a.download()
a.parse()
print(a.text[:150])
# 香港行政长官梁振英在各方压力下就其大宅的违章建
# 筑(僭建)问题到立法会接受质询,并向香港民众道歉。
# 梁振英在星期二(12月10日)的答问大会开始之际
# 在其演说中道歉,但强调他在违章建筑问题上没有隐瞒的
# 意图和动机。一些亲北京阵营议员欢迎梁振英道歉,
# 且认为应能获得香港民众接受,但这些议员也质问梁振英有
print(a.title)
# 港特首梁振英就住宅违建事件道歉
这个工具所支持的所有语言如下:
你可以按需选择自己所需要的语言。
3.高级玩法
前面我们说过,Newspaper 是一个可以并发下载文章的框架,它是这么玩的:
"""
Python 实用宝典
《Newspaper — 一个能下载38种语言新闻文章的 Python 模块》
"""
import newspaper
from newspaper import news_pool
slate_paper = newspaper.build('http://slate.com')
tc_paper = newspaper.build('http://techcrunch.com')
espn_paper = newspaper.build('http://espn.com')
papers = [slate_paper, tc_paper, espn_paper]
news_pool.set(papers, threads_per_source=2) # (3*2) = 总计 6 线程
news_pool.join()
# 到这一步,你可以假定三个新闻源的文章都下载完成了
print(slate_paper.articles[10].html)
# u'<html> ...'
可以看到,作者通过 build 三个新闻源,拿到一个总的新闻源池进行并发请求。
其中,.set 函数起到了调度作用,它能通过指定 threads_per_source 的值设定每个新闻源的线程。最后再 join 起来开始并发请求新闻源并开始下载新闻。
此外,Newspaper 还有一些参数可供你配置,比如:
如果你需要使用以上参数,可以设一个Config对象,传入指定的 Article 对象或build 方法中,如:
import newspaper
from newspaper import Config, Article, Source
config = Config()
config.memoize_articles = False
cbs_paper = newspaper.build('http://cbs.com', config)
非常简单易懂,而且设置起来的维护成本不算很高。
在做一些舆情分析或者NLP算法训练/测试的时候,这个模块简直就是你的福音。你可以很方便地从网站上提取任意语言的文本数据,拿来测试或者训练都可以。
对于那些想要搞舆情分析,寻找市场热点的同学而言,这个模块也是非常方便,你能搭配邮件发布工具,并使用Newspaper的关键词提取功能,迅速制作一个关键词热点实时告警的工具。
总而言之,这是一个非常值得了解并学习使用的第三方模块,强烈推荐。
我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。
有任何问题,可以在公众号后台回复:加群,回答相应红字验证信息,进入互助群询问。
原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!
点击下方阅读原文可获得更好的阅读体验
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典