深度模拟用户行为:用Playwright爬取B站弹幕与评论数据

💡 引言:B站数据为何如此"难爬"?

B站(Bilibili)作为国内最受欢迎的视频弹幕网站之一,页面采用大量JavaScript渲染 ,数据接口绑定复杂的登录验证和加密参数 ,直接使用 requests 等传统方式已难以满足爬虫需求。

如果你想:

  • 获取某视频的弹幕内容(实时滚动弹幕)
  • 获取评论区的真实用户评论(分页加载 + 登录校验)
  • 绕过浏览器检测机制,模拟真实用户行为访问网页

那么,Playwright 是一个极具威力的自动化武器,远胜Selenium,性能更好,支持无头模式,适配Chromium/Firefox/WebKit。深度模拟用户行为:用Playwright爬取B站弹幕与评论数据

一、准备工作:环境安装与配置

1. 安装Playwright

python 复制代码
pip install playwright
playwright install

二、目标与思路

我们将实现以下目标:

功能 实现方式
打开B站视频页面 Playwright模拟用户访问
自动登录(可选) 账号Cookie复用
提取视频弹幕 调用https://comment.bilibili.com/{cid}.xml接口
提取视频评论 模拟滚动评论区 + 接口抓取

三、实战步骤详解

1. 获取 cid(弹幕接口的关键参数)

每个视频的 cid 可以通过接口获取:

python 复制代码
import requests

def get_cid(bvid):
    api = f'https://api.bilibili.com/x/player/pagelist?bvid={bvid}'
    resp = requests.get(api)
    json_data = resp.json()
    return json_data['data'][0]['cid']

2. 获取弹幕内容(XML)

python 复制代码
from xml.etree import ElementTree

def get_danmaku(cid):
    url = f'https://comment.bilibili.com/{cid}.xml'
    response = requests.get(url)
    response.encoding = 'utf-8'
    root = ElementTree.fromstring(response.text)

    print("弹幕列表:")
    for d in root.findall('d'):
        print(d.text)

3. 获取评论内容(Playwright模拟浏览器)

python 复制代码
import asyncio
from playwright.async_api import async_playwright
import json

async def fetch_comments(bvid):
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)  # 设为True为无头模式
        context = await browser.new_context()
        page = await context.new_page()
        
        url = f"https://www.bilibili.com/video/{bvid}"
        await page.goto(url)
        await page.wait_for_timeout(5000)  # 等待页面加载
        await page.mouse.wheel(0, 5000)  # 滚动到底部加载评论

        # 拦截评论请求数据包
        comments = []

        async def handle_response(response):
            if "main?oid" in response.url and response.status == 200:
                try:
                    json_data = await response.json()
                    replies = json_data['data']['replies']
                    for r in replies:
                        comments.append(r['content']['message'])
                except:
                    pass

        page.on("response", handle_response)

        await page.wait_for_timeout(5000)  # 等待评论加载
        print("评论内容:")
        for c in comments:
            print(" -", c)

        await browser.close()

# 示例调用
asyncio.run(fetch_comments("BV1Kb4y1D7hq"))

四、可选:Cookie登录绕过账号验证

B站部分评论或视频需登录后才能访问,推荐使用已登录账号的Cookie导入方式

python 复制代码
ookies = [     {"name": "SESSDATA", "value": "你的值", "domain": ".bilibili.com", "path": "/"},     
# 可添加其他字段如 bili_jct、buvid3 等 ]  # Playwright上下文中注入Cookie await context.add_cookies(cookies) 

五、进阶建议:模拟人类行为

为了防止Playwright被检测为自动化工具,可引入以下策略:

  • 1.加载图片/视频内容,减少"无头痕迹"
  • 2.随机鼠标移动、滚动时间间隔
  • 3.使用 playwright-stealth 插件
  • 4.使用 undetected_chromedriver 替代方案

六、爬虫工具推荐

爬虫在线转换: 爬虫工具箱 - 在线爬虫与数据处理工具

相关推荐
太岁又沐风3 天前
复现并修掉ART hook框架 Pine 调用原方法时的偶发 SIGSEGV
爬虫
隔窗听雨眠4 天前
大模型加爬虫上篇:技术融合与架构革新
爬虫·架构
YangYang9YangYan4 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
有Li4 天前
PTCMIL:基于提示 token 聚类的全切片图像多实例学习分析文献速递/多模态医学影像最新进展
论文阅读·学习·数据挖掘·聚类·文献·医学生
数睿数据无代码开发4 天前
打破数据孤岛:深度解析 smardaten 数据连接器核心功能
数据挖掘·无代码
Super Scraper4 天前
如何批量抓取 TikTok 数据而不被封锁?完整指南
爬虫·ai·自动化·抖音·tiktok·ai agent
深蓝电商API4 天前
自动化录屏 + 截图:打造爬虫调试的上帝视角
爬虫
jarreyer4 天前
【数据分析绘图】excel绘图和bi工具区别
数据挖掘·数据分析·excel
tang777894 天前
市场调研自动化采集架构:基于住宅IP轮换的APP数据抓取与反风控方案
爬虫·动态代理ip·爬虫代理ip·爬虫动态ip·住宅代理ip·动态住宅ip
数据知道4 天前
指纹浏览器环境的导入、导出、快照与云端同步机制
爬虫·数据采集·指纹浏览器