百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

真香,Python爬取B站弹幕原来如此简单,源码已附在文末

off999 2024-12-30 06:06 41 浏览 0 评论

B站的弹幕区一直是人才圣地。今天我就用 python 来手把手教大家爬取B站排行榜热门视频,Python爬取视频也可以如此简单。

网站分析

在B站中,只要视频中有弹幕,就会有一个 cid 参数。cid 用来表示某个视频对应的弹幕池。每个弹幕都有一个对应的 XML 文件,我们可以通过解析 XML 文件获取到 B 站视频的弹幕。

所以,只要知道了 cid 参数值,就可以找到视频弹幕数据的位置了。

那我们在观看视频的时候该如何拿到这个 XML 文件呢?

B 站的弹幕是在 XML 文件里,每个视频都有其对应的 cid 和 aid,我们取到 cid 中的数字放入 http://comment.bilibili.com/cid.xml,即可得到该视频对应的弹幕 XML 文件。

首先我们打开视频播放地址,F12打开浏览器开发者模式,如下图找到视频对应的cid就可以构造出弹幕链接

http://comment.bilibili.com/451236101.xml

到此可为止,有了弹幕文件,后面将通过爬虫方式解析弹幕,并进行弹幕内容分析。

请求发送

我们使用request模拟浏览器发送请求获取弹幕数据

url = f'http://comment.bilibili.com/{
   cid}.xml'

headers = {
 
      'referer': 'https://www.bilibili.com/video/BV19h411s7oq?spm_id_from=333.934.0.0',
      'User-Agent': 'https://www.bilibili.com/video/BV19h411s7oq?spm_id_from=333.934.0.0',
      'cookie': "_uuid=19DF1EDB-20B7-FF74-A700-9DF415B2429530977infoc; buvid3=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc; sid=jzp2723t; fingerprint=2e74a5bc11a3adec2616987dde475370; buvid_fp=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc; buvid_fp_plain=AAD6C6C7-FB31-40E7-92EC-7A6A7ED3920C148814infoc; DedeUserID=434541726; DedeUserID__ckMd5=448fda6ab5098e5e; SESSDATA=1fe46ad7%2C1651971297%2Ceb583*b1; bili_jct=5bcd45718996ac402a29c7f23110984d; blackside_state=1; rpdid=|(u)YJlJmmu|0J'uYJYRummJm; bp_t_offset_434541726=590903773845625600; bp_video_offset_434541726=590903773845625600; CURRENT_BLACKGAP=0; LIVE_BUVID=AUTO5716377130871212; video_page_version=v_old_home; PVID=1; CURRENT_FNVAL=976; i-wanna-go-back=1; b_ut=6; b_lsid=4F7CFC82_17D78864851; bsource=search_baidu; innersign=1"
     }

  resp = requests.get(url, headers = headers)
  print(resp.text)

成功获取到了数据但是全部都是乱码,这里我们不用设置字符的编码格式,

只需要让request获取到的编码格式和网页的编码格式相等即可

一行代码即可搞定

# 调用.encoding属性获取requests模块的编码方式
    # 调用.apparent_encoding属性获取网页编码方式
    # 将网页编码方式赋值给response.encoding
    resp.encoding = resp.apparent_encoding

成功获取到弹幕数据

信息提取

数据已经给成功的获取到,接下来我们要提取出所有的弹幕信息,

我们从获取到网站的响应信息后可以看出,所有的弹幕文字信息其实都是在

****标签之内的

<d

p="221.05300,1,25,16777215,1638378040,0,a60c99c7,58346355162459136,10">太木呐了 二仙桥大爷</d>

所以我们选择使用正则提取。

# 获取所有评论内容
content_list = re.findall('<d p=".*?">(.*?)</d>', resp.text)

数据保存

我们使用函数将所有的弹幕数据存储在’B站弹幕.csv’文件中

if os.path.exists(comment_file_path):
    os.remove(comment_file_path)
for item in content_list:

    with open(comment_file_path, 'a', encoding = 'utf-8')as fin:
        fin.write(item + '\n')
        print(item)
print('-------------弹幕获取完毕!-------------')

数据处理

接下来就是对数据去重和去空处理了,然后随机抽取五条数据展示如下:

# 读取数据
rcv_data = pd.read_csv('./B站弹幕.csv', encoding='gbk')

# 抽样展示5条数据
print(rcv_data.sample(5))

          精彩弹幕 
538       一脸开心        
162         好活        
661  买两箱,,买买买买        
17    笑死我了 哈哈哈        
424       不忘初心

词频展示

文章评论出现频率最高的前十个词分别如下:

# 词频设置
all_words = [word for word in result.split(' ') if len(word) > 1 and word not in stop_words]
wordcount = Counter(all_words).most_common(10)
    
'''
('哈哈哈', '大爷', '制作', '离谱', '一起', '猝不及防', '二仙', 'sir', '卧槽', '一定')
(207, 69, 27, 13, 13, 13, 12, 12, 12, 9)
'''

词云展示

我们使用结巴分词

最后使用stylecloud绘制漂亮的词云图展示

# 词云展示
def visual_ciyun():
    pic = './img.jpg'
    gen_stylecloud(text=result,
                   icon_name='fas fa-archway',
                   font_path='msyh.ttc',
                   background_color='white',
                   output_name=pic,
                   custom_stopwords=stop_words
                   )
print('词云图绘制成功!')

源码奉上

# -*- coding: utf-8 -*-
# Date: 2021/12/2 10:00
# Author: 不卖萌的邓肯
# wechat: 印象python

import requests
import re, os
import jieba
from wordcloud import WordCloud
from imageio import imread

comment_file_path = 'B站弹幕.csv'

def spider_page(cid):
    url = f'http://comment.bilibili.com/{
   cid}.xml'

    headers = {
 
        'referer': 'xxxxx',
        'User-Agent': 'xxxxx',
        'cookie': "xxxxx"
     }

    resp = requests.get(url, headers = headers)
    # 调用.encoding属性获取requests模块的编码方式
    # 调用.apparent_encoding属性获取网页编码方式
    # 将网页编码方式赋值给response.encoding
    resp.encoding = resp.apparent_encoding

    print(resp.text)

    if resp.status_code == 200:
        # 获取所有评论内容
        content_list = re.findall('<d p=".*?">(.*?)</d>', resp.text)

        if os.path.exists(comment_file_path):
            os.remove(comment_file_path)
        for item in content_list:

            with open(comment_file_path, 'a', encoding = 'utf-8')as fin:
                fin.write(item + '\n')
                print(item)
        print('-------------弹幕获取完毕!-------------')

def data_visual():
    with open(comment_file_path, encoding='utf-8')as file:
        comment_text = file.read()
        wordlist = jieba.lcut_for_search(comment_text)
        new_wordlist = ' '.join(wordlist)
        mask = imread('img_1.png')
        wordcloud = WordCloud(font_path='msyh.ttc', mask=mask).generate(new_wordlist)
        wordcloud.to_file('picture_1.png')

if __name__ == '__main__':
    cid = '451236101'
    print('正在解析,开始爬取弹幕中。。。。。')
    spider_page(cid)
    #data_visual()

今天分享就到此结束啦!有问题,评论区见~~

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: