爬取微博爆搜第一的ZW评论,来看看大家都评论了什么~
共 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. 本文仅供学习参考,不做它用。