zoukankan      html  css  js  c++  java
  • 用python 抓取B站视频评论,制作词云

    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 + '
      ')
      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+'
      ')
      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 + '
      ')
      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 + '
      ')
      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/

  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/xsmile/p/8004433.html
Copyright © 2011-2022 走看看