实战 | 用可视化方式看新闻,迅速了解最新时事热点

AirPython

共 3205字,需浏览 7分钟

 ·

2021-05-13 13:14


大家好,我是安果!


今天教大家如何爬取新浪网新闻数据,通过词云可视化展示新闻关键词,快速了解最新的新闻热点。这里爬取了 2500 条新闻数据进行演示


2aa2535ab097d380db01baac4d566071.webp


这里采集的主要是国内最新新闻数据,先来看一下数据:


8c90db2f0669447d358450ea55dac6e7.webp



1

网页分析


在开始采集之前先说一下新闻数据来源(新浪网)

https://news.sina.com.cn/china/


42ae3d4c9f2b9f1d05f6042ec018a851.webp


下一页分析


我们想要采集多条数据,因此需要找到下一页的规律


ec4509363f782134fda397bd96b86f11.webp


点击第二页的时候,发现网页链接没有变化,这里数据是通过异步加载过来的


因此查看 network,找到了目标异步链接:

https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8&callback=feedCardJsonpCallback&_=1619440444354


但发现 callback=feedCardJsonpCallback&_=1619440444354,可以去掉,因此最终链接如下:

https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8


参数 page 是页数,经过测试 page 范围在 1~125,到 126 的时候就请求到的是空数据


每一页一共有 20 条,因此一共是 2500 条新闻数据


json数据结构


42ae3d4c9f2b9f1d05f6042ec018a851.webp


118bbad9fd749aa9001ac5f261423a1b.webp


这里咱们学院获取三个字段(标题 title、原标题 intro、关键词 keywords)



2

采集数据


采集第一页

分析好之后,下面开始使用 python 编程采集数据

url="https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=1&encode=utf-8"res = requests.get(url,headers=headers).json()data = res['result']['data']for i in data:    print(i['title'])    print(i['intro'])    print(i['keywords'])


3129c153ed7713b91438bc1d09a54df6.webp


这是第一页的数据,已经可以成功采集,只需要改变 page 值就可以采集下一页数据。接着开始把采集的数据存入到 excel 中


保存数据

这里使用 openxl 库去将数据保存到 excel 中,先定义表头

outwb = openpyxl.Workbook()outws = outwb.create_sheet(index=0)outws.cell(row=1, column=1, value="标题")outws.cell(row=1, column=2, value="原标题")outws.cell(row=1, column=3, value="关键词")


接着写入到 excel 中

count = 2for page in range(1,126):    url="https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page="+str(page)+"&encode=utf-8"    res = requests.get(url,headers=headers).json()    data = res['result']['data']    for i in data:        outws.cell(row=count, column=1, value=i['title'])        outws.cell(row=count, column=2, value=i['intro'])        outws.cell(row=count, column=3, value=i['keywords'])        count = count + 1        print("采集第"+str(count)+"条")outwb.save("新闻数据-李运辰.xls")  # 保存

019c1346143d6fed1cbd4e61b1b3f9b8.webp


8c90db2f0669447d358450ea55dac6e7.webp



3

词云可视化


这里主要绘制三个词云可视化(用标题、原标题、关键词分布作为数据去画图)


标题是原标题的精简版,关键词是这篇文章的核心关键词,通过绘制这个三个词云图,然后进行对比分析


读取数据

datafile = u'新闻数据-李运辰.xls'data = pd.read_excel(datafile)d1 = data['标题'].tolist()d2 = data['原标题'].tolist()d3 = data['关键词'].tolist()


标题词云可视化


###标题词云图word_list = jieba.cut("".join(d1))result = " ".join(word_list)  # 分词用 隔开picp = '标题.png'gen_stylecloud(text=result, icon_name="fas fa-hand-point-left", font_path='simsun.ttc', background_color="white",output_name=picp)  # 必须加中文字体,否则格式错误


c2ca81b4979fbf0b333da5e6ecf4ffea.webp

原标题词云可视化


在画词云图之前,先对数据进行处理一下(比如 “原标题:” 去掉)


414cd9c6da010c41e13c19cf68925659.webp


###原标题词云图word_list = jieba.cut(("".join(d2)).replace("原标题:",""))result = " ".join(word_list)  # 分词用 隔开#制作中文云词picp = '原标题.png'gen_stylecloud(text=result, icon_name="fas fa-hand-point-right", font_path='simsun.ttc', background_color="white",output_name=picp)  # 必须加中文字体,否则格式错误


4715fa2e6af303c03e160df77d1e1426.webp

关键词词云可视化


###关键词词云图d3_list = []for i in d3:    i = str(i)    if i!="nan":        if "," in i:            for k in i.split(","):                d3_list.append(k)        else:            d3_list.append(i)result = " ".join(d3_list)  # 分词用 隔开# # 制作中文云词picp = '关键词.png'gen_stylecloud(text=result, icon_name="fas fa-hand-point-up", font_path='simsun.ttc', background_color="white",output_name=picp)  # 必须加中文字体,否则格式错误


626bbe30a2bea32ef3285d31450a571a.webp


分析:

三个词云图的时事热点都差不多,核心点在于“新冠肺炎”、“病例”、“北京”、“与外交国家等情况”


具体就不过多的说,通过词云图可以一目了然的了解到当前国内的核心热点关键词


浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报