1. 什么是Newspaper
Newspaper框架是Python爬虫框架中在GitHub上点赞排名第三的爬虫框架,适合抓取新闻网页。操作简单容易上手,因为使用它不需要考虑header、IP代理,也不需要考虑网页解析,网页源代码架构等问题。这个是它的优点,但也是它的缺点,不考虑这些会导致它访问网页时会有被直接拒绝的可能。
总结:
Newspaper框架并不适用于实际工程类新闻信息爬取工作,框架不稳定,爬取过程中会有各种bug,例如获取不到url、新闻信息等,但对于想获取一些新闻语料的朋友不妨一试,简单方便易上手,且不需要掌握太多关于爬虫方面的专业知识。
2. 安装Newspaper3k库
pip install newspaper3k
(python3使用的是newspaper3k,而python2使用的是newspaper,已经弃用)
GitHub:https://github.com/codelucas/newspaper
3. 通过Newsapper3k获取新闻内容
3.1 获取单一新闻方式
爬取单条新闻用到的是newspaper中的Article包,需要提供某篇新闻的URL.
## 用Article爬取单条新闻
from newspaper import Article
# 目标新闻网址
url = 'https://news.sina.com.cn/w/2021-01-14/doc-ikftpnnx6834497.shtml'
news = Article(url, language='zh')
news.download() # 加载网页
news.parse() # 解析网页
print('题目:',news.title) # 新闻题目
print('正文:\n',news.text) # 正文内容
print(news.authors) # 新闻作者
news.nlp()
print(news.keywords) # 新闻关键词
print(news.summary) # 新闻摘要
print(news.publish_date) #新闻发布时间
# print(news.top_image) # 配图地址
# print(news.movies) # 视频地址
# print(news.publish_date) # 发布日期
# print(news.html) # 网页源代码
结果:
除了常用到的正文和题目外,还可以获取新闻的作者、发布时间、摘要、关键词、图片链接、视频链接等等,但是并不能100%识别,很多新闻的作者,关键词和文章摘要都无法识别出来,发布时间,图片、视频链接就基本能识别出来。
如果文章没有指明使用的什么语言的时候,newspaper会尝试自动识别,目前newspaper可以支持35种语言,基本上可以说能够覆盖时间上绝大多数国家和地区的新闻了。
查看newspaper库支持的语言及其对应参数输入:newspaper.languages()
3.2 获取多条新闻爬取
如果是单一的去爬取新闻,效率很低,如果是需要爬取某个网站或者多个网站的大量新闻,这样使用明显是不够的。newspaper可以通过构建新闻源,把整个新闻网站的所有新闻包含进来,然后再通过这个新闻源对新闻网站进行索引和爬取。
3.2.1 构建新闻源
import newspaper
url = 'https://news.sina.com.cn/china/'
south_paper = newspaper.build(url, language='zh') # 构建新闻源
print("一共多少条链接:",south_paper.size()) #查看有多少链接
3.2.2 文章缓存
这里我们需要注意, 默认情况下,newspaper缓存所有以前提取的文章,并删除它已经提取的任何文章。此功能用于防止重复的文章和提高提取速度。如果我们再次运行时,显示的将只有几十条,这些则是在这段时间内增加的新链接。可以使用memoize_articles = False参数选择退出此功能。
import newspaper
url = 'https://news.sina.com.cn/china/'
south_paper = newspaper.build(url, language='zh',memoize_articles = False) # 构建新闻源
print("一共多少条链接:",south_paper.size()) #查看有多少链接
3.2.3 提取源类别
这里提取的是新闻网站的主网页
在一个新闻网站中会有其他新闻的网站链接,通过category_urls()可提取出源网站下所有的其他新闻网站链接,可以通过取出来的网站链接,建立更多的新闻源,从而获取跟多的新闻。
import newspaper
url = 'https://news.sina.com.cn'
south_paper = newspaper.build(url, language='zh',memoize_articles = False) # 构建新闻源
print("一共多少条链接:",south_paper.size()) #查看有多少链接
for category in south_paper.category_urls():
print(category)
结果:
一共多少条链接: 5000
https://news.sina.com.cn/china/
http://my.sina.com.cn
http://book.sina.com.cn
http://finance.sina.com.cn
http://piyao.sina.cn
http://news.sina.com.cn
http://eladies.sina.com.cn
http://english.sina.com
https://corp.sina.com.cn
http://zhongce.sina.com.cn
http://mil.news.sina.com.cn
http://www.sina.com.cn
https://news.sina.com.cn
http://video.sina.com.cn
http://news.sina.cn
https://video.sina.com.cn
http://edu.sina.com.cn
http://cul.news.sina.com.cn
http://baby.sina.com.cn
http://blog.sina.com.cn
http://emarketing.sina.com.cn
http://history.sina.com.cn
http://corp.sina.com.cn
http://ent.sina.com.cn
http://games.sina.com.cn
http://slide.news.sina.com.cn
http://travel.sina.com.cn
http://news.video.sina.com.cn
http://photo.sina.com.cn
http://health.sina.com.cn
http://auto.sina.com.cn
http://fashion.sina.com.cn
http://zhuanlan.sina.com.cn
http://sports.sina.com.cn
http://collection.sina.com.cn
http://fo.sina.com.cn
http://astro.sina.com.cn
http://tech.sina.com.cn
3.2.4提取源新闻网站的品牌和描述
south_paper.brand # 获得网站品牌
south_paper.description # 获得网站描述
3.2.5 查看新闻链接
构建新闻源之后,还可以查看整个新闻源下的所有新闻链接及其数量,通过for循环,可以一一列出所有对应的新闻网页。这里会将新闻源中每一篇新闻报道的实际网址获取到
# 查看新闻源下面的所有新闻链接
for article in south_paper.articles:
print(article.url)
len(south_paper.articles) # 查看新闻链接的数量,与south_paper.size()一致
3.3 提取新闻源下的是有新闻内容
通过for循环,可以将新闻报道一篇一篇的进行加载并解析,将其内容爬取出来,因为newspaper库是属于比较简单粗暴的访问网页进行爬取,出现拒绝访问的可能性还是很大的,所以还必须得使用try试错。
import newspaper
import pandas as pd
url = 'https://news.sina.com.cn/china/'
south_paper = newspaper.build(url, language='zh',memoize_articles = False) # 构建新闻源
print("一共多少条链接:",south_paper.size()) #查看有多少链接
news_title = []
news_text = []
news_url = []
news = south_paper.articles
print(type(news)) # 类型为<class 'list'>
for i in range(len(news)): # 以新闻链接的长度为循环次数
paper = news[i]
try :
paper.download()
paper.parse()
news_title.append(paper.title) # 将新闻题目以列表形式逐一储存
news_text.append(paper.text) # 将新闻正文以列表形式逐一储存
news_url.append(paper.url) # 获取新闻的url
except:
news_title.append('NULL') # 如果无法访问,以NULL替代
news_text.append('NULL')
news_url.append(paper.url)
continue
# 建立数据表存储爬取的新闻信息
south_paper_data = pd.DataFrame({'title':news_title,'text':news_text,'url':news_url})
south_paper_data
我这里测试的时候只打印了20个,因为数据太多了。
一共多少条链接: 5000
<class 'list'>
Building prefix dict from D:\python\lib\site-packages\jieba\dict.txt ...
Loading model from cache C:\Users\xiaoluo\AppData\Local\Temp\jieba.cache
Loading model cost 0.7569754123687744 seconds.
Prefix dict has been built succesfully.
title ... url
0 “过年不回家”,如何引导? ... https://video.sina.com.cn/p/news/2021-01-13/de...
1 黑龙江齐齐哈尔昂昂溪区已封控 ... https://video.sina.com.cn/p/news/2021-01-12/de...
2 态度坚决!林郑月娥:受外国*不合理制裁 我们没理由坐视不管 ... https://video.sina.com.cn/p/news/2021-01-12/de...
3 石家庄疫情呈局部高度聚集性 ... https://video.sina.com.cn/p/news/2021-01-12/de...
4 河北14日0时至10时新增47例本土确诊病例 均在石家庄 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
5 被美国放鸽子后 岛内网友自嘲:“莱猪吃太少” ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
6 河北新增1例新冠肺炎死亡病例:患有基础性疾病 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
7 *铁链缠腰转往赤柱*收押 戴手铐犹如重犯 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
8 WHO专家组飞抵武汉 将遵循当地防疫规定接受隔离 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
9 任弼时长女任远志逝世 享年90岁 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
10 河北新增81+4 两人6次核酸检测才呈阳性 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
11 小学文化按摩师成“风水大师” 为秦光荣布阵求升官 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
12 石家庄一确诊病例曾两次到呼和浩特装卸货 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
13 警惕!时隔242天,本土首次出现死亡病例,在河北 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
14 都自顾不暇了,特朗普还要制裁*、番茄 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
15 1月13日河北新增81例本地确诊病例 石家庄市报告75例 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
16 香港九龙城区区*兼律师黄国桐等11人被警方拘捕 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
17 春节返乡是否需要隔离?31个省市最新情况汇总 ... https://news.sina.com.cn/o/2021-01-14/doc-ikft...
18 老外体验中国极严防控:登机时 感觉自己像被绑到UFO上的可疑标本 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
19 石家庄等地血小板库存告急 呼吁有序捐献 ... https://news.sina.com.cn/c/2021-01-14/doc-ikft...
[20 rows x 3 columns]