1. 程式人生 > >用python 抓取B站視頻評論,制作詞雲

用python 抓取B站視頻評論,制作詞雲

port mil query 雲圖 ges cal 爬取 close hid

python 作為爬蟲利器,與其有很多強大的第三方庫是分不開的,今天說的爬取B站的視頻評論,其實重點在分析得到的評論化作嵌套的字典,在其中取出想要的內容。層層嵌套,眼花繚亂,分析時應細致!步驟分為以下幾點:

  1. F12進入開發者選項
    進入B站你想觀看的視頻頁面,例如我看的是咬人貓的一個視頻,進入開發者選項後,向下拉取視頻評論,這時評論內容才被加載出來,此刻在開發者選項中網絡那裏就可以看到從網站獲取的很多信息,仔細查找,發現我們想要的如下圖:
    技術分享圖片
    可以看到評論區的內容,點開消息頭中的請求網址(https://api.bilibili.com/x/v2/reply?callback=jQuery172048896660782015544_1512700122908&jsonp=jsonp&pn=1&type=1&oid=11022534&sort=0&_=1512700148066),復制粘貼到瀏覽器中查看,可看到一頁的評論內容,取出不必要的網址內容,剩余為:https://api.bilibili.com/x/v2/reply?pn=1&type=1&oid=11022534 ,其中pn即為第幾頁的評論,oid為視頻的av號。
  2. 分析獲取內容字典格式,嵌套內容的包含關系
  3. 代碼獲取內容,寫入本地文件
    技術分享圖片
     1 import requests
     2 import json
     3 def getHTML(html):
     4     count=1
     5     fi=open(bilibili.txt,w,encoding=utf-8)
     6     while(True):
     7         url=html+str(count)
     8         url=requests.get(url)
     9         if url.status_code==200:
    10             cont=json.loads(url.text)
    
    11 else: 12 break 13 lengthRpy = len(cont[data][replies]) 14 if count==1: 15 try: 16 lengthHot=len(cont[data][hots]) 17 for i in range(lengthHot): 18 # 熱門評論內容 19 hotMsg=cont[
    data][hots][i][content][message] 20 fi.write(hotMsg + \n) 21 leng=len(cont[data][hots][i][replies]) 22 for j in range(leng): 23 # 熱門評論回復內容 24 hotMsgRp=cont[data][hots][i][replies][j][content][message] 25 fi.write(hotMsgRp+\n) 26 except: 27 pass 28 if lengthRpy!=0: 29 for i in range(lengthRpy): 30 comMsg=cont[data][replies][i][content][message] 31 fi.write(comMsg + \n) 32 # print(‘評論:‘,cont[‘data‘][‘replies‘][i][‘content‘][‘message‘]) 33 leng=len(cont[data][replies][i][replies]) 34 for j in range(leng): 35 comMsgRp=cont[data][replies][i][replies][j][content][message] 36 fi.write(comMsgRp + \n) 37 else: 38 break 39 print("第%d頁寫入成功!"%count) 40 count += 1 41 fi.close() 42 print(count-1,頁評論寫入成功!) 43 44 url="https://api.bilibili.com/x/v2/reply?type=1&oid=" 45 av=input("input your url:") 46 html=url+av+&pn= 47 getHTML(html)
    獲取評論內容

  4. 繪制詞雲
    繪制詞雲過程分為:讀取繪制詞雲文本,用結巴(第三方庫jieba)將文本中高頻詞匯分出,為詞雲設置背景圖片(可省略),查看及保存繪制詞雲圖
    代碼如下:
    技術分享圖片
     1 from wordcloud import WordCloud,ImageColorGenerator
     2 import matplotlib.pyplot as plt
     3 from PIL import Image
     4 import numpy as np
     5 from os import path
     6 import jieba
     7 
     8 lj=path.dirname(__file__)   #當前文件路徑
     9 text=open(path.join(lj,bilibili.txt),encoding=utf-8).read() #讀取的文本
    10 jieba.add_word(咬人貓)
    11 jieba.add_word(喵醬)    #添加結巴分辨不了的詞匯
    12 jbText= .join(jieba.cut(text))
    13 imgMask=np.array(Image.open(path.join(lj,msk.png)))   #讀入背景圖片
    14 wc=WordCloud(
    15     background_color=white,
    16     max_words=500,
    17     font_path=msyh.ttc,    #默認不支持中文
    18     mask=imgMask,  #設置背景圖片
    19     random_state=30 #生成多少種配色方案
    20 ).generate(jbText)
    21 ImageColorGenerator(imgMask)   #根據圖片生成詞雲顏色
    22 # plt.imshow(wc)
    23 # plt.axis(‘off‘)
    24 # plt.show()
    25 wc.to_file(path.join(lj,biliDM.png))
    26 print(成功保存詞雲圖片!)
    詞雲繪制

    技術分享圖片技術分享圖片

在代碼極少的情況下,python就能做出如此驚人的工作,只能是 人生苦短,我用python 了。

原創不易,尊重版權。轉載請註明出處:http://www.cnblogs.com/xsmile/

用python 抓取B站視頻評論,制作詞雲