网页视频抓取工具 知乎(如何爬取B站视频的弹幕和评论?|Python )
优采云 发布时间: 2021-11-10 20:09网页视频抓取工具 知乎(如何爬取B站视频的弹幕和评论?|Python
)
开发工具
Python版本:3.6.4
相关模块:
请求模块;
重新模块;
熊猫模块;
以及一些 Python 自带的模块。
环境设置
安装Python并将其添加到环境变量中,pip安装所需的相关模块。
思维分析
本文以爬取视频《“这是我见过最拽的中国奥运冠军”》为例,讲解如何爬取B站视频的弹幕和评论!
目标地址
https://www.bilibili.com/video/BV1wq4y1Q7dp 复制代码
抢弹幕
网络分析
B站视频的弹幕不像腾讯视频。播放视频会触发弹幕数据包。他需要点击网页右侧的弹幕列表行展开,然后点击查看历史弹幕,可以得到视频弹幕的开始日期和结束日期。日链接:
在链接的末尾,使用oid和开始日期形成弹幕日期URL:
https://api.bilibili.com/x/v2/dm/history/index?type=1&oid=384801460&month=2021-08 复制代码
在此基础上,点击任一生效日期,即可获得该日期的弹幕数据包。里面的内容目前无法读取。之所以确定是弹幕数据包,是因为日期是点击他刚加载出来的,链接和上一个链接有关系:
获取到的网址:
https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=384801460&date=2021-08-08 复制代码
URL中的oid是视频弹幕链接的id值;data参数是刚才的日期,要获取视频的所有弹幕内容,只需要修改data参数即可。data参数可以从上面弹幕日期url中获取,也可以自己构造;网页数据格式为json格式
代码
import requests\ import pandas as pd\ import re\ \ def data_resposen(url):\ headers = {\ "cookie": "你的cookie",\ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"\ }\ resposen = requests.get(url, headers=headers)\ return resposen\ \ def main(oid, month):\ df = pd.DataFrame()\ url = f'https://api.bilibili.com/x/v2/dm/history/index?type=1&oid={oid}&month={month}'\ list_data = data_resposen(url).json()['data'] # 拿到所有日期\ print(list_data)\ for data in list_data:\ urls = f'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid={oid}&date={data}'\ text = re.findall(".*?([\u4E00-\u9FA5]+).*?", data_resposen(urls).text)\ for e in text:\ print(e)\ data = pd.DataFrame({'弹幕': [e]})\ df = pd.concat([df, data])\ df.to_csv('弹幕.csv', encoding='utf-8', index=False, mode='a+')\ \ if __name__ == '__main__':\ oid = '384801460' # 视频弹幕链接的id值\ month = '2021-08' # 开始日期\ main(oid, month) 复制代码
显示结果