它通过输入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

最后采集,可以采集数十万条评论,想要完整代码可以联系我,白嫖勿扰!

01-18 10:20