您好,登錄后才能下訂單哦!
Python如何爬取騰訊視頻跑男的評論并做簡單文本的可視化分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
「《奔跑吧》第五季」已經播出兩期了,節目以“黃河生態經濟帶”沿線地區為依托,通過創新游戲設置、直播帶貨扶貧等新形式,展現黃河流域的重要地位,描繪黃河生態經濟帶城市“文化之美”。
然而,網友貌似并不買賬,鄧超、鄭凱等退出跑男后,「收視明顯不如以前」,而吐槽貌似有所增加。為了了解吃瓜群眾們對于跑男的看法,我爬了爬騰訊視頻關于跑男的評論,并做了簡單文本「可視化分析」。
騰訊視頻評論要點擊「查看更多評論」才能加載更多數據,很明顯是一個動態網頁,評論內容使用了「Ajax動態加載技術」。因此,我們需要找到「真實URL」,然后再請求數據。通過真實URL獲取到cursor=?和_=?這兩個參數即可。核心代碼如下:
def main(): #初始頁面的_=? page=1607948139253 #初始待刷新頁面的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()
import jieba import re import numpy as np import pandas as pd 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
分別爬取了兩期評論,因此需要分別讀取并合并所有數據。
df1 = pd.read_csv('/騰訊評論/paonan.csv',names=['評論內容']) df2 = pd.read_csv('/騰訊評論/paonan1.csv',names=['評論內容']) df = pd.concat([df1,df2]) df.head(10)
數據預覽
print('共有評論數:',df.shape[0],'條')
共有評論數:21307 條
df.info() df['評論內容'] = df['評論內容'].astype('str')
<class 'pandas.core.frame.DataFrame'> Int64Index:21307 entries, 0 to 11833 Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 評論內容 21199 non-null object dtypes: object(1) memory usage: 332.9+ KB
df = df.drop_duplicates()
df = df.dropna()
人為劃分評論類型,20字以下為短評,20-50字為中評,50字以上為長評。
cut = lambda x : '短評'if len(x) <= 20else ('中評'if len(x) <=50else'長評') df['評論類型'] = df['評論內容'].map(cut)
根據評論內容關鍵詞,提取出人物提及字段。
tmp=[] for i in df["評論內容"]: if"黑牛"in i: tmp.append("李晨") elif"楊穎"in i: tmp.append("楊穎") elif"沙溢"in i: tmp.append("沙溢") elif"坤"in i: tmp.append("蔡徐坤") elif"毅"in i: tmp.append("成毅") elif"一桐"in i: tmp.append("李一桐") else: tmp.append("其他") df['人物提及'] = tmp
定義一個機械壓縮函數:
def yasuo(st): for i in range(1,int(len(st)/2)+1): for j in range(len(st)): if st[j:j+i] == st[j+i:j+2*i]: k = j + i while st[k:k+i] == st[k+i:k+2*i] and k<len(st): k = k + i st = st[:j] + st[k:] return st yasuo(st="123")
調用函數,對評論內容進行機械壓縮去重:
df["評論內容"] = df["評論內容"].apply(yasuo)
用正則表達式提取出中文:
df['評論內容'] = df['評論內容'].str.extract(r"([\u4e00-\u9fa5]+)") df = df.dropna() #純表情彈幕直接刪除
過濾掉評論字數少于四個字的評論:
df = df[df["評論內容"].apply(len)>=4] df = df.dropna()
# 繪制詞云圖 text1 = get_cut_words(content_series=df['評論內容']) stylecloud.gen_stylecloud(text=' '.join(text1), max_words=1000, collocations=False, font_path='演示悠然小楷.ttf', icon_name='fas fa-video', size=653, #palette='matplotlib.Inferno_9', output_name='./評論.png') Image(filename='./評論.png')
通過對所有評論進行詞云圖繪制,我們發現「成毅」提及最多,對于最新跑男的看法,大家表現出非一致的看法。有人說「好看、喜歡」,有人說「沒意思」。另外,評論中還多次提到往期節目中的嘉賓,如「陳赫、鄭凱、郭麒麟」等,沒有比較就沒有傷害,很多人還是更喜歡往期的跑男的。
df2 = df.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}:aegqsqibtmh%",font_size=18)) ) c.render_notebook()
短評占據「81.99%」,僅有2.65%的觀眾給出了50字以上的評論。
df8 = df["人物提及"].value_counts(ascending=True)[:6] print(df8.index.to_list()) print(df8.to_list()) c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK)) .add_xaxis(df8.index.to_list()) .add_yaxis("",df8.to_list()).reversal_axis() .set_global_opts(title_opts=opts.TitleOpts(title="人物提及次數",subtitle="數據來源:騰訊視頻 ",pos_left = 'top'), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改橫坐標字體大小 yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13)), #更改縱坐標字體大小 ) .set_series_opts(label_opts=opts.LabelOpts(font_size=16,position='right')) ) c.render_notebook()
新成員「成毅」被觀眾提及次數最多,達到790次,其次是「蔡徐坤」,被提及452次。李晨被提及次數最少。
cy = df[df["人物提及"]=="成毅"] text = get_cut_words(content_series=cy['評論內容']) stylecloud.gen_stylecloud(text=' '.join(text), max_words=500, collocations=False, font_path='演示悠然小楷.ttf', icon_name='fas fa-comments', #palette='matplotlib.Inferno_9', size=653, output_name='./dinghui.png') Image(filename='./dinghui.png')
成毅在新一季跑男的表現被網友廣泛議論,認可他的觀眾「喜歡、期待、可愛」他的表現。也有相當多的觀眾覺得他「智商」有問題,是個「游戲黑洞」,而且很「搞笑」。
關于Python如何爬取騰訊視頻跑男的評論并做簡單文本的可視化分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。