它通过输入Bilibili视频的av号、BV号或链接,然后使用指定的cookie和请求头信息发送HTTP请求来获取视频的评论数据。然后,它将评论数据解析为CSV格式,并保存到指定的文件中。
具体实现过程如下:
导入所需的库:requests用于发送HTTP请求,os用于操作文件路径,time用于处理时间,json用于解析JSON数据,pandas用于数据处理。
设置相关参数:设置cookie(登录Bilibili账号后获取)和数据保存路径等参数。
定义函数visit(bv)用于访问Bilibili视频网页,判断视频是否存在。
定义函数Bta(bv)用于将BV号转化为av号。
定义函数send_f(bv, nexts=0, mode=3)用于发送父评论的请求,获取父评论的JSON数据。
定义函数send_r(bv, rpid, pn=1)用于发送子评论的请求,获取子评论的JSON数据。
定义函数parse_comment_r(bv, rpid)用于解析子评论的JSON数据,并返回CSV格式的子评论数据。
定义函数parse_comment_f(bv)用于解析父评论的JSON数据,并调用parse_comment_r()函数解析子评论。
定义主函数main(),从CSV文件中读取Bilibili视频信息,循环遍历视频列表并调用parse_comment_f()函数来获取评论数据,并将解析后的评论数据保存为CSV文件。
执行主函数并输出结束提示。
主要代码如下:
def send\_f(bv, nexts=0, mode=3):
''' 返回父评论json \\n bv: 全bv号 \\n nests: json页码 \\n mode: 1楼层,2时间,3热门 '''
r\_url = 'https://api.bilibili.com/x/v2/reply/main'
url = 'https://www.bilibili.com/video/' + bv
av = Bta(bv)
headers = {
'accept': '\*/\*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
'cookie': cookie,
'pragma': 'no-cache',
'referer': url,
'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'script',
'sec-fetch-mode': 'no-cors',
'sec-fetch-site': 'same-site',
'user-agent': '你的user-agent',
}
data = {
# 'callback': 'jQuery172030289933285891424\_' + str(time.time()\*1000)\[:13\],
'jsonp': 'jsonp',
'next': nexts, # 页码
'type': '1',
'oid': av, # av号
'mode': mode, # 1:楼层大前小后, 2:时间晚前早后, 3:热门评论
'plat': '1',
'\_': str(time.time()\*1000)\[:13\], # 时间戳
}
response = requests.get(r\_url, headers = headers, params = data)
response.encoding = 'utf-8'
# 将得到的json文本转化为可读json
if 'code' in response.text:
c\_json = json.loads(response.text)
else:
c\_json = {'code': -1}
if c\_json\['code'\] != 0:
print('json error!')
print(response.status\_code)
print(response.text)
return 0 # 读取错误
return c\_json
最后采集,可以采集数十万条评论,想要完整代码可以联系我,白嫖勿扰!