Python新闻内容爬虫:Newspaper3k

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.
Python新闻内容爬虫:Newspaper3k

## 用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)      # 网页源代码

结果:
Python新闻内容爬虫:Newspaper3k
除了常用到的正文和题目外,还可以获取新闻的作者、发布时间、摘要、关键词、图片链接、视频链接等等,但是并不能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]

上一篇:2021年最佳99网站创建工具(网站)推荐


下一篇:金华“外围女”