您好,登錄后才能下訂單哦!
Python如何爬取騰訊視頻跑男的評論并做簡單文本的可視化分析,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
「《奔跑吧》第五季」已經(jīng)播出兩期了,節(jié)目以“黃河生態(tài)經(jīng)濟帶”沿線地區(qū)為依托,通過創(chuàng)新游戲設(shè)置、直播帶貨扶貧等新形式,展現(xiàn)黃河流域的重要地位,描繪黃河生態(tài)經(jīng)濟帶城市“文化之美”。
然而,網(wǎng)友貌似并不買賬,鄧超、鄭凱等退出跑男后,「收視明顯不如以前」,而吐槽貌似有所增加。為了了解吃瓜群眾們對于跑男的看法,我爬了爬騰訊視頻關(guān)于跑男的評論,并做了簡單文本「可視化分析」。
騰訊視頻評論要點擊「查看更多評論」才能加載更多數(shù)據(jù),很明顯是一個動態(tài)網(wǎng)頁,評論內(nèi)容使用了「Ajax動態(tài)加載技術(shù)」。因此,我們需要找到「真實URL」,然后再請求數(shù)據(jù)。通過真實URL獲取到cursor=?和_=?這兩個參數(shù)即可。核心代碼如下:
def main(): #初始頁面的_=? page=1607948139253 #初始待刷新頁面的cursor=? lastId="0" for i in range(1,1000): time.sleep(1) html = get_content(page,lastId) #獲取評論數(shù)據(jù) 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
分別爬取了兩期評論,因此需要分別讀取并合并所有數(shù)據(jù)。
df1 = pd.read_csv('/騰訊評論/paonan.csv',names=['評論內(nèi)容']) df2 = pd.read_csv('/騰訊評論/paonan1.csv',names=['評論內(nèi)容']) df = pd.concat([df1,df2]) df.head(10)
數(shù)據(jù)預(yù)覽
print('共有評論數(shù):',df.shape[0],'條')
共有評論數(shù):21307 條
df.info() df['評論內(nèi)容'] = df['評論內(nèi)容'].astype('str')
<class 'pandas.core.frame.DataFrame'> Int64Index:21307 entries, 0 to 11833 Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 評論內(nèi)容 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['評論內(nèi)容'].map(cut)
根據(jù)評論內(nèi)容關(guān)鍵詞,提取出人物提及字段。
tmp=[] for i in df["評論內(nèi)容"]: 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
定義一個機械壓縮函數(shù):
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")
調(diào)用函數(shù),對評論內(nèi)容進行機械壓縮去重:
df["評論內(nèi)容"] = df["評論內(nèi)容"].apply(yasuo)
用正則表達式提取出中文:
df['評論內(nèi)容'] = df['評論內(nèi)容'].str.extract(r"([\u4e00-\u9fa5]+)") df = df.dropna() #純表情彈幕直接刪除
過濾掉評論字數(shù)少于四個字的評論:
df = df[df["評論內(nèi)容"].apply(len)>=4] df = df.dropna()
# 繪制詞云圖 text1 = get_cut_words(content_series=df['評論內(nèi)容']) 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')
通過對所有評論進行詞云圖繪制,我們發(fā)現(xiàn)「成毅」提及最多,對于最新跑男的看法,大家表現(xiàn)出非一致的看法。有人說「好看、喜歡」,有人說「沒意思」。另外,評論中還多次提到往期節(jié)目中的嘉賓,如「陳赫、鄭凱、郭麒麟」等,沒有比較就沒有傷害,很多人還是更喜歡往期的跑男的。
df2 = df.groupby('評論類型')['評論內(nèi)容'].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="數(shù)據(jù)來源:騰訊視頻",pos_top="2%",pos_left = 'center')) .set_series_opts(label_opts=opts.LabelOpts(formatter=":hzrxmea%",font_size=18)) ) c.render_notebook()
短評占據(jù)「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="人物提及次數(shù)",subtitle="數(shù)據(jù)來源:騰訊視頻 ",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()
新成員「成毅」被觀眾提及次數(shù)最多,達到790次,其次是「蔡徐坤」,被提及452次。李晨被提及次數(shù)最少。
cy = df[df["人物提及"]=="成毅"] text = get_cut_words(content_series=cy['評論內(nèi)容']) 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')
成毅在新一季跑男的表現(xiàn)被網(wǎng)友廣泛議論,認可他的觀眾「喜歡、期待、可愛」他的表現(xiàn)。也有相當多的觀眾覺得他「智商」有問題,是個「游戲黑洞」,而且很「搞笑」。
關(guān)于Python如何爬取騰訊視頻跑男的評論并做簡單文本的可視化分析問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。