文章目录
- 概要
- 整体架构流程
- 技术名词解释
- 技术细节
- 1. 关键API接口
- 2. 反爬解决方案
- 3. 数据存储优化
- 4. 完整代码实现
- 小结
本文是一篇关于使用Python爬虫技术获取Bilibili数据的实战教程。核心目标是爬取指定B站视频的评论数据,通过分析其API接口、模拟登录Cookie等反爬虫策略,最终将结构化数据保存为CSV文件,为数据分析与挖掘提供基础。
概要
本文介绍如何通过Python爬取B站视频评论数据。关键技术点包括:
- B站API接口分析
- 反爬机制突破(Cookie模拟登录)
- 评论数据存储为结构化CSV文件
- 自动化分页爬取策略
整体架构流程
技术名词解释
- BV号:B站视频的唯一标识符,如
BV1rG411j7u9 - oid:视频的数字ID,通过API接口转换获得
- SESSDATA:B站登录会话Cookie的关键字段
- API限流:B站对未登录用户限制为每分钟5-10次请求
技术细节
1. 关键API接口
# 获取视频oid"https://api.bilibili.com/x/web-interface/view?bvid={bvid}"# 获取评论(分页)"https://api.bilibili.com/x/v2/reply?type=1&oid={oid}&pn={page}"2. 反爬解决方案
headers={"User-Agent":"Mozilla/5.0...","Referer":"https://www.bilibili.com","Cookie":"SESSDATA=xxx; bili_jct=xxx"# 需定期更新}3. 数据存储优化
# 使用utf-8-sig编码解决Excel乱码withopen(filename,"a",encoding="utf-8-sig")asf:writer=csv.writer(f)4. 完整代码实现
importrequestsimporttimeimportcsvdefget_oid(bvid):url=f"https://api.bilibili.com/x/web-interface/view?bvid={bvid}"headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...","Cookie":"buvid3=xxx; SESSDATA=xxx"# 需替换实际Cookie}try:response=requests.get(url,headers=headers,timeout=10)returnresponse.json()['data']['aid']exceptExceptionase:print(f"获取oid失败:{e}")returnNonedefget_comments(oid,bvid,page=1):url="https://api.bilibili.com/x/v2/reply"params={"type":1,"oid":oid,"pn":page,"ps":20}try:response=requests.get(url,headers=headers,params=params)returnresponse.json()ifresponse.status_code==200elseNoneexceptExceptionase:print(f"获取评论失败:{e}")returnNonedefsave_comments(comments,filename="comments.csv"):withopen(filename,"a",newline="",encoding="utf-8-sig")asf:writer=csv.writer(f)forcommentincomments:writer.writerow([comment['member']['uname'],comment['content']['message'],comment['like']])if__name__=="__main__":bvid=input("请输入视频BV号:")oid=get_oid(bvid)forpageinrange(1,6):data=get_comments(oid,bvid,page)ifnotdata:breaksave_comments(data['data']['replies'])time.sleep(1.5)# 遵守API限流小结
技术要点:
- 必须使用有效Cookie绕过登录限制
- 需要控制请求频率(建议≥1.5秒/次)
- 评论数据采用追加写入模式
注意事项:
- Cookie有效期约7天,需定期更新
- 商业用途需获得B站官方授权
- 建议增加异常处理和日志记录
扩展方向:
- 添加代理IP池应对封禁
- 使用Selenium模拟浏览器获取动态Cookie
- 结合情感分析处理评论内容
声明:本代码仅用于学习交流,请遵守B站用户协议,禁止用于商业用途。建议在爬取前检查robots.txt文件确认合规性。