Python爬取b站视频:验证cookie是否有效

具体代码

import requests

headers = {
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
    'Referer': 'https://www.bilibili.com/',
    'Origin': 'https://www.bilibili.com'
}
def 
<think>好的,我现在需要帮助用户解决如何使用Python爬取B视频《雾山五行》的评论数据。首先,我得回忆一下B的评论接口以及常见的爬虫方法。 用户提到了引用[2]、[3]、[4]这几个来源,其中引用[2]和[3]提到爬取B、微博和豆瓣的评论,而引用[4]则有一段代码保存评论到CSV。这可能意味着用户之前有相关的示例,但需要具体的步骤。 首先,B的评论数据通常是通过API获取的。我记得B的API接口可能会有变化,所以需要确认当前的接口是否有效。一般来说,B视频的评论接口是https://api.bilibili.com/x/v2/reply/main,需要传递oid(视频的av号或BV号)、type(类型,视频通常是1)、以及分页参数。此外,请求头需要设置User-Agent和cookie,可能还需要referer来避免被反爬。 接下来,步骤可能包括:找到视频的oid,构造请求URL,发送请求获取JSON数据,解析数据提取评论,处理分页,最后保存到CSV。需要注意的是,B可能有反爬机制,比如需要登录后的cookie,或者限制请求频率,所以可能需要设置延时或者使用代理。 然后,代码部分需要使用requests库发送HTTP请求,用json模块解析返回的数据。评论可能嵌套在回复中,所以可能需要递归提取或者遍历多层结构。分页方面,B的评论是分页加载的,每页可能有20条左右,需要循环请求直到没有更多数据。 在引用中,用户提供的示例代码里用了comment_df['comments'].to_csv,说明可能用到了pandas库来保存数据。因此,代码中可能需要将评论列表转换为DataFrame再保存。 另外,用户提供的引用[2]提到爬取B、微博、豆瓣的数据,但用户的问题只针对B,所以需要专注于B的部分。引用[4]中的代码片段可能是一个保存评论的例子,可以借鉴。 现在需要考虑可能的错误点,比如oid是否正确,cookie是否需要更新,分页参数是否正确处理。此外,B的API返回的数据结构可能会有嵌套,需要正确解析。 总结步骤应该是: 1. 获取视频的oid(即aid或对应的BV号转换后的数字)。 2. 构造请求URL,设置请求头(包括cookie)。 3. 发送请求,处理分页,获取所有评论数据。 4. 解析JSON,提取评论内容、用户信息、时间等。 5. 保存数据到CSV文件。 需要提醒用户注意遵守B的使用条款,设置适当的请求间隔,避免被封IP。同时,可能需要登录获取cookie,才能访问评论数据。 现在,将这些步骤转化为具体的代码,并验证其可行性。可能需要测试获取oid的方法,比如通过视频URL解析BV号,再转换为oid。例如,BV号转aid可能需要调用另一个API接口,或者直接使用当前视频的aid。 最后,代码示例需要包含导入必要的库(requests、pandas),处理分页的循环,以及错误处理机制,比如请求失败的重试。</think>为了使用Python爬取B视频《雾山五行》的评论数据,可通过以下步骤实现: --- ### **1. 获取视频OID** 视频的唯一标识符`oid`可通过以下方式获取: - 从视频URL中提取`BV号`(如`https://www.bilibili.com/video/BV1qK4y1t7cb/`的BV号为`BV1qK4y1t7cb`) - 调用BAPI将`BV号`转换为`aid`(即`oid`): ```python import requests bv = "BV1qK4y1t7cb" resp = requests.get(f"https://api.bilibili.com/x/web-interface/view?bvid={bv}") oid = resp.json()['data']['aid'] ``` --- ### **2. 构造评论API接口** B评论接口为: ``` https://api.bilibili.com/x/v2/reply/main?oid={oid}&type=1&mode=3&next={page_num} ``` - `type=1`表示视频类型 - `page_num`为分页参数(初始为0) --- ### **3. 设置请求头与Cookie** 需添加`User-Agent`和`Cookie`避免被拦截[^2]: ```python headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "Referer": f"https://www.bilibili.com/video/{bv}", "Cookie": "YOUR_COOKIE_HERE" } ``` --- ### **4. 发送请求并解析数据** 遍历分页获取所有评论: ```python import pandas as pd comments = [] page = 0 while True: url = f"https://api.bilibili.com/x/v2/reply/main?oid={oid}&type=1&mode=3&next={page}" resp = requests.get(url, headers=headers) data = resp.json() if not data['data']['replies']: break for reply in data['data']['replies']: comments.append({ "用户": reply['member']['uname'], "内容": reply['content']['message'], "时间": reply['ctime'] }) page += 1 # 保存为CSV df = pd.DataFrame(comments) df.to_csv("comment.csv", index=False) ``` --- ### **5. 注意事项** - **Cookie获取**:登录B后,通过浏览器开发者工具(Network标签页)复制Cookie[^4] - **反爬策略**:添加请求间隔(如`time.sleep(1)`),避免高频请求 - **数据清洗**:评论内容可能包含表情符号(需处理`content['message']`中的转义符) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

knighthood2001

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值