爬取微博爆搜第一的ZW评论,来看看大家都评论了什么~

Python绿色通道

共 2099字,需浏览 5分钟

 ·

2022-05-17 05:27

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包】送你Python自学大礼包



最近一段时间,关于ZW的话题频频登上热搜,就比如今天就登上了热搜榜第一,并且是爆款。


让我们用Python来带大家看看微博上的网友们是怎么来评论的,这次的事情的~


01

数据采集


我们是从微博移动端来进行数据采集的。我们按F12,打开开发者模式,对网页进行观察



我们发现数据存储的网页是一个hotflow开头的页面,它的数据存储的方式是Ajax,那我们就可以知道请求的页面和提取数据的方式了。


在上面,我们已经找到数据存储的网页和方式,那么只需要找到页面之间的联系,构造好循环,就可以批量开始爬取啦~


接下来对不同页面之间的URL进行观察



它们URL里面的id和mid是固定不变的,但是max_id是变化的,然后我又在页面里面发现了max_id值的规律,每一页的max_id的值都在上一页中存储着。



但是这样还不能够全部都访问,具体的原因和改进措施,这里因为篇幅,志斌就不介绍了,有兴趣的读者可以看看这两篇文章,有详细解释

数据采集的核心代码:

import requests
import re
for page in range(1,10000):
if page == 1 :
params = (
('id', '4714646055423756'),
('mid', '4714646055423756'),
('max_id_type', '0'),
)
response = requests.get('https://m.weibo.cn/comments/hotflow', headers=headers, params=params)
a = response.json()['data']['max_id']
b = response.json()['data']['max_id_type']
for i in response.json()['data']['data']:

neirong = re.sub(r'<[^>]*>', '', i['text'])
with open(r'liba2.txt', 'a', encoding='utf-8') as f:
f.write(f'{neirong}\n')


02

分词处理


我们一共爬取了3792条评论数据,在做可视化分析之前,我们要先对其进行分词优化处理,代码如下:

with open('liba2.txt','r',encoding='utf-8') as f:
read = f.read()
with open('停用词表.txt','r',encoding='utf-8') as f:
stop_word = f.read()
word = jieba.cut(read)
words = []
for i in list(word):
if i not in stop_word:
words.append(i)

我们来看一下分词结果:


03

可视化展示


01

 频率top10词语



由上图可知,“知网”的词频最高,原因应该是主题是知网,其次是“哈哈哈”,看来我跟大家的想法都是一样的!


代码如下:

columns = []
data = []
for k,v in dict(Counter(words).most_common(10)).items():

columns.append(k)
data.append(v)
bar = (
Bar()
.add_xaxis(columns)
.add_yaxis("词频", data)
.set_global_opts(title_opts=opts.TitleOpts(title="词频top10"))
)
bar.render("词频.html")


02

 情感分析


在之前跟大家介绍过两种文本情感分析方法,有兴趣的读者可以看看这篇文章推荐一个强大的自然语言处理库—snownlp


在本文,我使用的是Snownlp库来对文本进行情感分析。


从图中,我们可以看到,大家的评论积极态度的有1453条,平和态度的有882条,消极态度只有1457条,看来大家对这件事的看法各有各的观点呀!


代码如下:

from snownlp import SnowNLP
with open('liba2.txt','r',encoding='utf-8') as f:
read = f.readlines()
positibe = negtive = middle = 0
for i in read:
pingfen = SnowNLP(i)
if pingfen.sentiments>0.7:
positibe+=1
elif pingfen.sentiments<0.3:
negtive+=1
else:
middle+=1


03

 词云图绘制



代码如下:

from imageio import imread
from wordcloud import WordCloud, STOPWORDS
word =''
for i in words:
word+=i
contents_cut_job_title = jieba.cut(word)
contents_list_job_title = " ".join(contents_cut_job_title)
wc = WordCloud(stopwords=STOPWORDS.add("一个"), collocations=False,
background_color="white",
font_path=r"K:\苏新诗柳楷简.ttf",
width=400, height=300, random_state=42,
mask=imread('xin.jpg', pilmode="RGB")
)
wc.generate(contents_list_job_title)
wc.to_file("推荐语.png")


04

小结


1. 本文以微博热搜第一ZW为例,详细介绍了微博评论的爬取、分词优化处理和可视化展示方法。

2. 对它的看法,欢迎大家到评论区发表。

3. 本文仅供学习参考,不做它用。




  1. 一位60后老程序员从零学习Python的感悟

  2. 30个案例,305页!超有趣的Python学习资料!


浏览 41
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报