【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论


您好,我是 @马哥python说,一枚10年程序猿。

一、爬取目标

之前,我分享过一些B站的爬虫:

【Python爬虫案例】用Python爬取李子柒B站视频数据
【Python爬虫案例】用python爬哔哩哔哩搜索结果
【爬虫+情感判定+Top10高频词+词云图】"谷爱凌"热门弹幕python舆情分析

但我学习群中小伙伴频繁讨论B站评论的爬取,所以,再分享一个B站视频评论的爬虫。

二、展示爬取结果

首先,看下部分爬取数据:

爬取字段含:视频链接、评论页码、评论作者、评论时间、IP属地、点赞数、评论内容

三、爬虫代码

导入需要用到的库:

import requests  # 发送请求
import pandas as pd  # 保存csv文件
import os  # 判断文件是否存在
import time
from time import sleep  # 设置等待,防止反爬
import random  # 生成随机数

定义一个请求头:

# 请求头
headers = {
    'authority': 'api.bilibili.com',
    'accept': 'application/json, text/plain, */*',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    # 需定期更换cookie,否则location爬不到
    'cookie': "需换成自己的cookie值",
    'origin': 'https://www.bilibili.com',
    'referer': 'https://www.bilibili.com/video/BV1FG4y1Z7po/?spm_id_from=333.337.search-card.all.click&vd_source=69a50ad969074af9e79ad13b34b1a548',
    'sec-ch-ua': '"Chromium";v="106", "Microsoft Edge";v="106", "Not;A=Brand";v="99"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-site',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.47'
}

请求头中的cookie是个很关键的参数,如果不设置cookie,会导致数据残缺或无法爬到数据。

那么cookie如何获取呢?打开开发者模式,见下图:

由于评论时间是个十位数:

所以开发一个函数用于转换时间格式:

def trans_date(v_timestamp):
    """10位时间戳转换为时间字符串"""
    timeArray = time.localtime(v_timestamp)
    otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    return otherStyleTime

向B站发送请求:

response = requests.get(url, headers=headers, )  # 发送请求

接收到返回数据了,怎么解析数据呢?看一下json数据结构:

0-19个评论,都存放在replies下面,replies又在data下面,所以,这样解析数据:

data_list = response.json()['data']['replies']  # 解析评论数据

这样,data_list里面就是存储的每条评论数据了。
接下来吗,就是解析出每条评论里的各个字段了。
我们以评论内容这个字段为例:

comment_list = []  # 评论内容空列表
# 循环爬取每一条评论数据
for a in data_list:
    # 评论内容
    comment = a['content']['message']
    comment_list.append(comment)

其他字段同理,不再赘述。

最后,把这些列表数据保存到DataFrame里面,再to_csv保存到csv文件,持久化存储完成:

# 把列表拼装为DataFrame数据
df = pd.DataFrame({
    '视频链接': 'https://www.bilibili.com/video/' + v_bid,
    '评论页码': (i + 1),
    '评论作者': user_list,
    '评论时间': time_list,
    'IP属地': location_list,
    '点赞数': like_list,
    '评论内容': comment_list,
})
# 把评论数据保存到csv文件
df.to_csv(outfile, mode='a+', encoding='utf_8_sig', index=False, header=header)

注意,加上encoding=‘utf_8_sig’,否则可能会产生乱码问题!

下面,是主函数循环爬取部分代码:(支持多个视频的循环爬取)

# 随便找了几个"世界杯"相关的视频ID
bid_list = ['BV1DP411g7jx', 'BV1M24y117K3', 'BV1nt4y1N7Kj']
# 评论最大爬取页(每页20条评论)
max_page = 30
# 循环爬取这几个视频的评论
for bid in bid_list:
    # 输出文件名
    outfile = 'b站评论_{}.csv'.format(now)
    # 转换aid
    aid = bv2av(bid=bid)
    # 爬取评论
    get_comment(v_aid=aid, v_bid=bid)

四、同步视频

演示视频:
【2023爬虫演示】用python抓取上千条「卡塔尔世界杯」B站评论!


五、附完整源码

附完整代码: 【B站评论爬虫】用python爬取上千条哔哩哔哩评论


我是马哥,全网累计粉丝上万,欢迎一起交流python技术。

各平台搜索“马哥python说”:知乎、哔哩哔哩、小红书、新浪微博。

<think>好的,我现在需要帮助用户解决如何采集小红书直播弹幕数据的问题。首先,用户提到了他们想了解方法、工具或者API。根据用户提供的引用内容,我之前有关于Python爬虫、弹幕数据采集以及逆向分析的经验,可能这些可以作为参考。 首先,我需要回顾引用中的信息。引用[1]和[2]提到通过浏览器开发者工具(F12)分析网络请求,找到弹幕数据的URL,然后使用Python爬虫进行采集。这可能适用于一些通过HTTP/HTTPS传输数据的直播平台。引用[3]则提到使用WebSocket或Flash的情况,需要逆向分析,比如定制ActionScript文件并编译为SWF,然后通过JavaScript获取数据。这可能适用于更复杂的情况,尤其是当弹幕使用WebSocket实时传输时。 但小红书作为主流社交平台,其直播弹幕可能采取了反措施,比如加密、WebSocket或者使用专有协议。需要先确认小红书直播弹幕的数据传输方式。如果用户直接使用常规的爬虫方法,比如抓包分析,可能会遇到困难,因为小红书可能有动态加密或需要处理实时流数据。 接下来,我需要考虑可能的步骤。首先,用户需要分析小红书直播页面的网络请求。打开开发者工具,切换到Network选项卡,然后过滤XHR、WebSocket等请求,查看是否有明显的弹幕数据接口。如果找到接口,可能需要处理参数加密或添加特定的请求头,比如用户认证信息。 如果弹幕数据是通过WebSocket传输的,那么可能需要使用Python的WebSocket库来建立连接并实时接收数据。这需要逆向分析WebSocket握手过程和消息格式,可能会比较复杂。引用[3]中的方法提到注入SWF文件,但现代直播平台可能已不再使用Flash,转而使用HTML5和WebSocket,所以可能需要不同的逆向手段。 此外,用户可能需要处理登录状态或Cookie,因为小红书直播可能需要登录才能获取弹幕数据。引用[2]中提到需要请求头、Cookie等信息,这可能也是必要的步骤。用户可能需要模拟登录小红书,获取有效的会话Cookie,然后在爬虫请求中携带这些信息。 工具方面,除了Python的requests、websockets库,可能需要使用自动化工具如Selenium或Playwright来处理动态加载的内容或人机验证。此外,逆向工程工具如Charles或Fiddler可以帮助抓包分析,特别是HTTPS流量需要配置SSL证书。 关于API,小红书可能不提供公开的API用于获取直播弹幕,因此可能需要通过逆向工程其私有接口。这需要一定的技术能力,并且存在法律风险,需确保遵守小红书的用户协议和相关法律法规。 最后,需要提醒用户注意合法合规,避免侵犯用户隐私或违反平台规定。总结步骤可能包括环境准备、数据抓包分析、逆向接口、编写爬虫代码、处理反措施以及数据存储等环节。</think>### 小红书直播弹幕数据采集方法 #### **1. 技术分析流程** 1. **环境准备** - 安装浏览器开发者工具(Chrome/Firefox)用于分析网络请求和页面结构 - 安装Python库如`requests`、`websockets`、`selenium`(若需处理动态加载) - 工具推荐:Charles/Fiddler(抓包工具)、Wireshark(网络协议分析)[^2] 2. **数据定位** - 打开小红书直播页面,按`F12`进入开发者工具 - 在**Network**选项卡中筛选`XHR`、`WebSocket`或`Fetch`请求,观察弹幕数据来源[^1] - 若弹幕通过WebSocket传输,需记录握手请求和消息格式(可能加密)[^3] 3. **逆向工程** - 若数据接口有加密参数(如`signature`、`token`),需通过调试`JavaScript`代码定位加密逻辑 - 对于WebSocket协议,使用Python的`websockets`库建立连接并监听实时数据流 - 若涉及反机制(如人机验证),可能需要`Selenium`模拟浏览器操作[^2] 4. **代码实现示例** ```python import requests # 模拟浏览器请求头(需替换实际Cookie和Token) headers = { "User-Agent": "Mozilla/5.0", "Cookie": "小红书登录态Cookie" } # 通过抓包获取的弹幕API接口 api_url = "https://live.xiaohongshu.com/api/弹幕接口" response = requests.get(api_url, headers=headers) if response.status_code == 200: danmu_data = response.json() # 解析JSON格式弹幕 ``` --- #### **2. 注意事项** - **法律合规性**:确保遵守小红书《用户协议》,避免未经授权的数据抓取 - **反策略**:可能需处理IP限流、动态Token、请求频率限制等问题 - **数据加密**:部分直播平台使用Protobuf或自定义二进制协议,需逆向解码逻辑 --- #### **3. 替代方案** - **第三方数据服务商**:购买合规的直播数据API(需审核供应商资质) - **自动化工具**:使用`MitmProxy`拦截手机端流量,捕获弹幕接口(需Root/越狱设备) ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马哥python说

打赏多少不重要,表达认可最重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值