基于Python的B站(哔哩哔哩)视频评论采集,可破解反爬手段,想爬几条爬几条

news/2024/7/19 20:36:05 标签: python, 开发语言, 网络爬虫

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

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


http://www.niftyadmin.cn/n/5333472.html

相关文章

【深度强化学习】目前落地的挑战与前沿对策

到目前为止,深度强化学习最成功、最有名的应用仍然是 Atari 游戏、围棋游戏等。即使深度强化学习有很多现实中的应用,但其中成功的应用并不多。为什么呢?本文总结目前的挑战。 目录 所需的样本数量太大探索阶段代价太大超参数的影响非常大稳定…

oracle篇—19c新特性自动索引介绍

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…

3d音响按键怎么建立模型---模大狮模型网

要建立3D音响按键的模型,您可以按照以下步骤进行: 选择建模软件:首先,选择一个三维建模软件,如Blender、3ds Max或Maya。这些软件都提供了丰富的建模工具和功能,适合用于创建复杂的三维模型。 参考图像&am…

Rust字符串:安全、高效和灵活的数据类型

Rust是一种现代的系统级编程语言,以其出色的内存安全性和高性能而受到广泛关注。在Rust中,字符串是一种重要的数据类型,它具有独特的特点,使其在处理文本和字符数据时成为理想的选择。本文将深入探讨Rust字符串的特性,…

鸿蒙开发之状态管理

State 组件内状态 State装饰的变量,会和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。在状态变量相关装饰器中,State是最基础的,使变量拥有状态属性的装饰器,它也是大部分状态变量的数据源。 装…

力扣309. 买卖股票的最佳时机含冷冻期(动态规划,Java C++解法)

Problem: 309. 买卖股票的最佳时机含冷冻期 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 Problem: 714. 买卖股票的最佳时机含手续费 该题目可以看作是上述题目的改编,该题目添加了一个冷冻期使得动态转移方程更加复杂,具体思路如下&#xf…

安全加速SCDN是什么

安全加速SCDN(Secure Content Delivery Network,SCDN) 是集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。已使用内容分发网络(CDN)或全站加速网络(ECDN)的用户&…

“重大利好”!以太坊坎昆升级临近!Layer2新玩家Blast不断蚕食市场份额,令竞品汗流浃背?

1月17日,坎昆升级(Dencun)率先在以太坊Goerli测试网启动,由于Goerli是参与者数量以及网络负载程度最高的测试网,仅次于以太坊主网,因此如果没什么问题,预示着主网升级已经不远。 而现在&#xf…