基于Drissionpage实现的b站评论爬取(无需逆向25/2/10可用)

       本文中的代码主要功能是从指定的 B 站视频链接中提取评论,并将其保存到一个文本文件中。用户可以指定需要爬取的页面次数以及保存的文件名。代码使用了 DrissionPage 库,这是一种基于 Selenium 和 Requests 的高层次网页抓取工具,支持异步请求和网络流监听。用户可以根据需要调整爬取的页面数量和保存的文件名,以满足特定的需求。

from DrissionPage import ChromiumPage  # pip install DrissionPage
import time
import json

URL = input("请输入B站视频链接:")
num = int(input("请输入要爬取的页面次数:"))
name = input("请输入要保存的文件名:")
name = name + '.txt'

page = ChromiumPage()
page.set.load_mode.none()

# 监听特定的网络流
page.listen.start('https://api.bilibili.com/x/v2/reply/wbi/main?')

# 访问B站页面
page.get(f'{URL}')
time.sleep(3)

for _ in range(num + 1):
    page.scroll.to_bottom()
    print("正在爬取第{0}页评论".format(_ + 1))
    time.sleep(2)

# 用于存储所有捕获的响应数据
responses = []

try:
    # 循环监听直到达到所需数量或超时
    for _ in range(num):
        # 等待网络请求包到达
        packet = page.listen.wait(timeout=10)

        # 停止加载页面(这步可以根据需求调整)
        page.stop_loading()

        # 接收 HTTP 响应内容
        response_body = packet.response.body

        # 将响应内容存储到列表中
        responses.append(response_body)

        time.sleep(1)

except Exception as e:
    print(f"解析出现错误: {e}")

# 处理和打印捕获到的所有响应
total_comments = 0

with open(name, 'a', encoding='utf-8') as file:
    for response in responses:
        try:
            if 'data' in response:
                datas = response['data']['replies']
                total_comments += len(datas)
                for data in datas:
                    comments = data['content']['message']
                    uname = data['member']['uname']
                    sex = data['member']['sex']
                    IP = data['reply_control']['location']
                    # print(f"评论内容: {comments}\n用户名: {uname}\n性别: {sex}\nIP地址: {IP}\n")
                    file.write(json.dumps(f"评论内容: {comments}, 用户名: {uname}, 性别: {sex}, IP地址: {IP}", ensure_ascii=False, indent=4))
                    file.write('\n')

        except KeyError as e:
            print(f"处理响应时出现错误: {e}")

page.close()

# 最后打印总评论数量
print(f"总评论数量: {total_comments}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值