本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
以下文章來源于菜鳥學Python資料分析 ,作者小dull鳥
前言
如今,關于iPhone12和華為mate40哪個好的爭論不斷,新浪科技發布一條關于“iPhone12和華為Mate40你選誰?”的投票,結果如下:
通過上圖可以看出,選華為的占56%,選蘋果的占23.74%,還有11%的人都不選、4%的人看到實物再選、5%的人都想要
為了進一步挖掘資料,我爬了該條微博的評論資料,并制作詞云圖,看看大家都在說什么
具體步驟如下:
1.分析微博評論資料介面
在微博移動端打開該條微博(因為移動端資料相對好爬),抓包獲取資料介面:
回傳的資料介面為json格式
再來看看url規律,第1、2、3頁評論資料的url分別為:
1.https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id_type=0
2.https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id=140496174237721&max_id_type=0
3.https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id=139259223284570&max_id_type=0
我們可以發現,除了第一頁格式唯一,其他的都相對固定,且id和mid的引數值固定,變化的為max_id引數
經過分析,當頁的max_id引數在上一頁的回傳資料中,例如,第二頁的max_id在第一頁的回傳資料中:
2.寫爬蟲代碼
這里要注意一點,爬蟲中要加入登錄后的cookie值,否則只能回傳第一頁資料,具體代碼如下:
import requests
import json
import re
import pandas as pd
url='https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id_type=0'
headers={'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'}
cookie={'Cookie':'換成自己的cookie'}
comments=[]
for i in range(50):
response=requests.get(url,headers=headers,cookies=cookie)
results=json.loads(response.text)
max_id=results['data']['max_id']
datas=results['data']['data']
patter=re.compile(r'(.*?)<',re.S)
for data in datas:
if '<' in data['text']:
text=re.findall(patter,data['text'])[0]
else:
text=data['text']
comments.append(text)
url='https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id={0}&max_id_type=0'.format(max_id)
結果如下:
3.將評論資料連成字符
content=''.join(comments)
4.使用jieba分詞,去除單個字符和換行符
segment = []
segs = jieba.cut(content) # 使用jieba分詞
for seg in segs:
if len(seg) > 1 and seg != '\r\n':
segment.append(seg)
5.對文本去噪
words_df = pd.DataFrame({'segment': segment})
words_df.head()
stopwords = pd.read_csv("stopword.txt", index_col=False,
quoting=3, sep='\t', names=['stopword'], encoding="utf8")
words_df = words_df[~words_df.segment.isin(stopwords.stopword)]
這一步主要是把沒用的詞語和詞語去除掉,‘stop.txt’獲取方式在文末
6.對剩下的詞語按組計算個數,并按個數大小進行排序
words_stat = words_df.groupby('segment').agg(count=pd.NamedAgg(column='segment', aggfunc='size'))
words_stat = words_stat.reset_index().sort_values(by="count", ascending=False)
7.自定義詞云背景,設定字體樣式
bimg = imread('mangguo.jpg')
wordcloud = WordCloud(background_color="white", mask=bimg, font_path='AdobeHeitiStd-Regular.otf')
wordcloud = wordcloud.fit_words(dict(words_stat.head(990000).itertuples(index=False)))
這一步若出錯,請把font換成電腦中已有的字體
8.從背景圖片生成顏色值
bimgColors = ImageColorGenerator(bimg)
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgColors))
9.生成詞云圖
wordcloud.to_file("iphoneVShuawei.png")
10.成果圖
從詞云圖中可以看出,大家還是比較支持華為的,同時還有不少人表示都太貴、買不起,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187617.html
標籤:Python
