用python 抓取B站视频评论,制作词云

news/2024/7/19 8:37:59 标签: python, 爬虫, json

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/

 

转载于:https://www.cnblogs.com/xsmile/p/8004433.html


http://www.niftyadmin.cn/n/819012.html

相关文章

Eclipse--Eclipse自动下载源码插件 Java Source Attacher

相信很多Java Coder都有过手动附加源代码的经历,去网上搜索,然后下载下来,最后附加上,很麻烦,而且很费时间,刚好去网上查了一下,发现Eclipse下有一款插件Java Source Attacher可以实现下载源码功…

24.3K Star,Windows 管理文件神器!

哈喽,大家好,我是开源君,一个资深的互联网玩家,致力于为大家分享各领域优质开源项目。各位开源老铁们,最近公众号改版了,大家记得星标开源指南,第一时间收到我们优质内容的更新!最近…

神经网络算法-蛙课网

神经网络算法属于逻辑思维能力较强的一种高级计算机算法,一般使用的是人工神经网络(Artificial Neural Networks),可以应用于模式识别、信号处理、专家系统、优化组合、机器人控制等方面,属于现在现在很火的人工智能&a…

7)变量

变量的三要素: 名称,大小,作用域,变量的生命周期 (以后学习语言,都是关注变量的这几点) 作用域不同于生命周期,有时,变量有自己的生命周期,但是 仅仅在一个小…

成为一名架构师得学习哪些知识?

于是,小灰去向大黄请教 这是有关未来的故事: 从前,有一个赶路的人路过一片工地,看到三个年轻人在工地上搬砖。 于是,他问其中一个人: 于是,他又问了第二个人: 于是,他又问…

线程中的守护者—守护线程-蛙课网

守护线程(即daemon thread),是个服务线程,是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成…

我TM反正先跑路了,无奈公司新人背了大锅...

本篇漫画故事改编自知乎高赞回答作者:哒柏链接:https://www.zhihu.com/question/365343579/answer/967299388 漫画原创公众号:不会笑青年,授权转载请联系微信(laughyouth369),授权后,请在原创发表48小时后转…

Nginx--Nginx 教程(1):基本概念

目录 简介 什么是 Nginx? 基本命令 指令和上下文 指令类型 数组指令 处理请求 最小化配置 简介 嗨!分享就是关心!所以,我们愿意再跟你分享一点点知识。我们准备了这个划分为三节的《Nginx教程》。如果你对 Nginx 已经有所…