爬取微博爆搜第一的ZW評(píng)論,來(lái)看看大家都評(píng)論了什么~
↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能
后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包
最近一段時(shí)間,關(guān)于ZW的話題頻頻登上熱搜,就比如今天就登上了熱搜榜第一,并且是爆款。

讓我們用Python來(lái)帶大家看看微博上的網(wǎng)友們是怎么來(lái)評(píng)論的,這次的事情的~
01
數(shù)據(jù)采集
我們是從微博移動(dòng)端來(lái)進(jìn)行數(shù)據(jù)采集的。我們按F12,打開開發(fā)者模式,對(duì)網(wǎng)頁(yè)進(jìn)行觀察

我們發(fā)現(xiàn)數(shù)據(jù)存儲(chǔ)的網(wǎng)頁(yè)是一個(gè)hotflow開頭的頁(yè)面,它的數(shù)據(jù)存儲(chǔ)的方式是Ajax,那我們就可以知道請(qǐng)求的頁(yè)面和提取數(shù)據(jù)的方式了。
在上面,我們已經(jīng)找到數(shù)據(jù)存儲(chǔ)的網(wǎng)頁(yè)和方式,那么只需要找到頁(yè)面之間的聯(lián)系,構(gòu)造好循環(huán),就可以批量開始爬取啦~
接下來(lái)對(duì)不同頁(yè)面之間的URL進(jìn)行觀察

它們URL里面的id和mid是固定不變的,但是max_id是變化的,然后我又在頁(yè)面里面發(fā)現(xiàn)了max_id值的規(guī)律,每一頁(yè)的max_id的值都在上一頁(yè)中存儲(chǔ)著。

但是這樣還不能夠全部都訪問(wèn),具體的原因和改進(jìn)措施,這里因?yàn)槠?,志斌就不介紹了,有興趣的讀者可以看看這兩篇文章,有詳細(xì)解釋
數(shù)據(jù)采集的核心代碼:
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條評(píng)論數(shù)據(jù),在做可視化分析之前,我們要先對(duì)其進(jìn)行分詞優(yōu)化處理,代碼如下:
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)我們來(lái)看一下分詞結(jié)果:

03
可視化展示
01
?頻率top10詞語(yǔ)

由上圖可知,“知網(wǎng)”的詞頻最高,原因應(yīng)該是主題是知網(wǎng),其次是“哈哈哈”,看來(lái)我跟大家的想法都是一樣的!
代碼如下:
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
?情感分析
在之前跟大家介紹過(guò)兩種文本情感分析方法,有興趣的讀者可以看看這篇文章推薦一個(gè)強(qiáng)大的自然語(yǔ)言處理庫(kù)—snownlp
在本文,我使用的是Snownlp庫(kù)來(lái)對(duì)文本進(jìn)行情感分析。
從圖中,我們可以看到,大家的評(píng)論積極態(tài)度的有1453條,平和態(tài)度的有882條,消極態(tài)度只有1457條,看來(lái)大家對(duì)這件事的看法各有各的觀點(diǎn)呀!

代碼如下:
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("一個(gè)"), collocations=False,
background_color="white",
font_path=r"K:\蘇新詩(shī)柳楷簡(jiǎn).ttf",
width=400, height=300, random_state=42,
mask=imread('xin.jpg', pilmode="RGB")
)
wc.generate(contents_list_job_title)
wc.to_file("推薦語(yǔ).png")
04
小結(jié)
1. 本文以微博熱搜第一ZW為例,詳細(xì)介紹了微博評(píng)論的爬取、分詞優(yōu)化處理和可視化展示方法。
2. 對(duì)它的看法,歡迎大家到評(píng)論區(qū)發(fā)表。
3. 本文僅供學(xué)習(xí)參考,不做它用。


