实战 | 用可视化方式看新闻,迅速了解最新时事热点
共 3205字,需浏览 7分钟
·
2021-05-13 13:14
大家好,我是安果!
今天教大家如何爬取新浪网新闻数据,通过词云可视化展示新闻关键词,快速了解最新的新闻热点。这里爬取了 2500 条新闻数据进行演示
这里采集的主要是国内最新新闻数据,先来看一下数据:
1
网页分析
在开始采集之前先说一下新闻数据来源(新浪网)
https://news.sina.com.cn/china/
下一页分析
我们想要采集多条数据,因此需要找到下一页的规律
点击第二页的时候,发现网页链接没有变化,这里数据是通过异步加载过来的
因此查看 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数据结构
这里咱们学院获取三个字段(标题 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'])
这是第一页的数据,已经可以成功采集,只需要改变 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 = 2
for 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") # 保存
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)
原标题词云可视化
在画词云图之前,先对数据进行处理一下(比如 “原标题:” 去掉)
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)
关键词词云可视化
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)
分析:
三个词云图的时事热点都差不多,核心点在于“新冠肺炎”、“病例”、“北京”、“与外交国家等情况”
具体就不过多的说,通过词云图可以一目了然的了解到当前国内的核心热点关键词