用python 抓取B站视频评论,制作词云
python 作为爬虫利器,与其有很多强大的第三方库是分不开的,今天说的爬取B站的视频评论,其实重点在分析得到的评论化作嵌套的字典,在其中取出想要的内容。层层嵌套,眼花缭乱,分析时应细致!步骤分为以下几点:
- 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号。 - 分析获取内容字典格式,嵌套内容的包含关系
- 代码获取内容,写入本地文件
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)
- 绘制词云
绘制词云过程分为:读取绘制词云文本,用结巴(第三方库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/
----------------------------------------声明----------------------------------------
----------------------------------------end----------------------------------------