Python爬取10000條“爆款劇”——《三十而已》熱評,並做視覺化
前言
繼《隱祕的角落》後,又一部“爆款劇”——《三十而已》獲得了口碑收視雙豐收,王漫妮、顧佳、鍾曉芹三個女主角的故事線頻頻登上微博熱搜。該劇於2020年7月17日在東方衛視首播,並在騰訊視訊同步播出。為了瞭解吃瓜群眾們對這部劇的看法,我爬了爬騰訊視訊關於這部劇的評論,並做了簡單文字視覺化分析。
PS:如有需要Python學習資料的小夥伴可以加下方的群去找免費管理員領取
可以免費領取原始碼、專案實戰視訊、PDF檔案等
一、資料獲取
1.分析評論頁面
騰訊視訊評論要點選檢視更多評論才能載入更多資料,很明顯是一個動態網頁,評論內容使用了Ajax動態載入技術。因此,我們需要找到真實URL,然後再請求資料。
找到真實URL其實不難,按照以下步驟即可找到。當然,你也可以使用抓包工具fiddler,同樣可以輕鬆找到。
2.尋找引數規律
我們多重新整理幾次,找幾個真實的URL看看這些引數有什麼變化。下圖是我重新整理了3次得到的真實的URL:
第1次重新整理: https://video.coral.qq.com/varticle/5572751505/comment/v2?callback=_varticle5572751505commentv2&orinum=10&oriorder=o&pageflag=1&cursor=6689895369036463828&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1595994099261 第2次重新整理: https://video.coral.qq.com/varticle/5572751505/comment/v2?callback=_varticle5572751505commentv2&orinum=10&oriorder=o&pageflag=1&cursor=6689950633282796870&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1595994099262 第3次重新整理: https://video.coral.qq.com/varticle/5572751505/comment/v2?callback=_varticle5572751505commentv2&orinum=10&oriorder=o&pageflag=1&cursor=6690046095919619518&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1595994099263
很顯然,只有cursor=?和_=?有變化,_=?為公差為1的等差數列,而cursor=?貌似沒有什麼規律。根據以往經驗,這類引數有可能藏在上一個真實URL中。我們嘗試將第1個URL在瀏覽器中開啟,然後搜尋第2個真實URL的中的cursor值。
還真有!一般情況下,我們還要多試幾次,對我們的猜想進行驗證。既然規律已經找到,接下來就很簡單了。限於篇幅,以下給出部分程式碼:
def main(): #初始頁面的_=? page=1595991084333 #初始待重新整理頁面的cursor=? lastId="0" for i in range(1,1000): time.sleep(1) html = get_content(page,lastId) #獲取評論資料 commentlist=get_comment(html) print("------第"+str(i)+"輪頁面評論------") k = 0 for j in range(1,len(commentlist)): comment = commentlist[j] k += 1 print('第%s條評論:%s'%(k,comment)) #獲取下一輪重新整理頁ID lastId=get_lastId(html) page += 1 if __name__ == '__main__': main()
二、資料處理
1.匯入相關包
#基礎資料分析庫 import numpy as np import pandas as pd #分詞庫 import jieba import re #繪相簿 import matplotlib.pyplot as plt from pyecharts.charts import * from pyecharts import options as opts from pyecharts.globals import ThemeType import stylecloud from IPython.display import Image
2.匯入評論資料
df = pd.read_csv('/Users/我是J哥/Documents/技術公號/公號專案/2.spider/騰訊/comment.csv',names=['評論內容']) df.sample(5)
3.資料型別轉換
df.info() df['評論內容'] = df['評論內容'].astype('str')
4.刪除重複評論
df = df.drop_duplicates()
5.增加評論型別
cut = lambda x : '短評' if len(x) <= 20 else ('中評' if len(x) <=50 else '長評') df['評論型別'] = df['評論內容'].map(cut)
6.提取演員關鍵詞
result = [] for i in df['評論內容']: result.append(re.split('[::,,.。!!~·`\;;……、]',i)) def actor_comment(df,result): actors = pd.DataFrame(np.zeros(6 * len(df)).reshape(len(df),6), columns = ['王漫妮','顧佳','鍾曉芹','江疏影','童瑤','毛曉彤']) for i in range(len(result)): words = result[i] for word in words: if '王漫妮' in word or '王曼妮' in word: actors.iloc[i]['王漫妮'] = 1 if '顧佳' in word: actors.iloc[i]['顧佳'] = 1 if '鍾曉芹' in word: actors.iloc[i]['鍾曉芹'] = 1 if '江疏影' in word: actors.iloc[i]['江疏影'] = 1 if '童瑤' in word or '童謠' in word: actors.iloc[i]['童瑤'] = 1 if '毛曉彤' in word: actors.iloc[i]['毛曉彤'] = 1 final_result = pd.concat([df,actors],axis = 1) return final_result df1 = actor_comment(df,result) df1.head(10)
三、資料視覺化
1.整體評論情況
df2 = df1.groupby('評論型別')['評論內容'].count() df2 = df2.sort_values(ascending=False) regions = df2.index.to_list() values = df2.to_list() c = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK)) .add("", zip(regions,values),radius=["40%", "70%"]) .set_global_opts(title_opts=opts.TitleOpts(title="評論型別佔比",subtitle="資料來源:騰訊視訊",pos_top="2%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=18)) ) c.render_notebook()
通過對一萬多條熱評內容繪製詞雲圖,我們很容易看出大家對《三十而已》的喜歡,以及對主要角色和演員的關注。家庭與工作如何兼得?婚姻與愛情如何共處?這些問題都被廣大觀眾所熱議。
2.評論型別分佈
df2 = df1.groupby('評論型別')['評論內容'].count() df2 = df2.sort_values(ascending=False) regions = df2.index.to_list() values = df2.to_list() c = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK)) .add("", zip(regions,values),radius=["40%", "70%"]) .set_global_opts(title_opts=opts.TitleOpts(title="評論型別佔比",subtitle="資料來源:騰訊視訊",pos_top="2%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%",font_size=18)) ) c.render_notebook()
從評論型別來看,以短評居多,佔比72.52%。另外,有4.15%的評論者給出了50字以上的評論,表達出自己對《三十而已》的獨到見解。
3.演員角色提及
df3 = df1.iloc[:,2:].sum().reset_index().sort_values(0,ascending = True) df3.columns = ['角色','次數'] df3['佔比'] = df3['次數'] / df3['次數'].sum() c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK)) .add_xaxis(df3['角色'].to_list()) .add_yaxis("",df3['次數'].to_list()).reversal_axis() #X軸與y軸調換順序 .set_global_opts(title_opts=opts.TitleOpts(title="主演及其飾演的角色被提及次數",subtitle="資料來源:騰訊視訊",pos_top="2%",pos_left = 'center'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改橫座標字型大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=16)), #更改縱座標字型大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()
童瑤及其飾演的顧佳被評論者提及的次數最多,都超過500次。江疏影,人氣也較高,獲得了300多次的評論。王漫妮和鍾曉芹提及次數相對少一些,隨著劇情的推進應該會有所提升。
4.對王漫妮的評論
王漫妮是眾人眼中的標準都市女性,大家普遍認為她長得好看又努力上進,甚至有人覺得她是完美的存在。身為櫃姐的她對顧客進行極致化服務,卻遭到現實的嘲諷。感情上,想要好好過日子的她卻遇到不該遇到的男人。
5.對顧佳的評論
顧佳作為一名全職太太,在觀眾看來是個優秀的居家女人。雙商線上能力強,將自己的孩子和丈夫的公司都打理得井井有條。與此同時,幸福的生活出現了入侵者,顧佳沒有被現實打倒,勇敢應戰。另外,顧佳因為長得像章子怡,也被眾多觀眾所提及。
6.對鍾曉芹的評論
鍾曉芹被認為是標準化的大多數,嫁給事業單位鐵飯碗的男人,安心做一個平凡妻子,過一個普通生活。卻因寫作愛好偶然賣出高價版權,家庭情況變得複雜,鍾曉芹面臨艱難抉擇。
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理。
以上文章來源於菜J學Python ,作者:J哥