当前位置: 首页 > news >正文

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

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

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

如果你想:

  • 获取某视频的弹幕内容(实时滚动弹幕)

  • 获取评论区的真实用户评论(分页加载 + 登录校验)

  • 绕过浏览器检测机制,模拟真实用户行为访问网页

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

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

    1. 安装Playwright

    pip install playwright
    playwright install

    二、目标与思路

    我们将实现以下目标:

    功能

    实现方式

    打开B站视频页面

    Playwright模拟用户访问

    自动登录(可选)

    账号Cookie复用

    提取视频弹幕

    调用https://comment.bilibili.com/{cid}.xml接口

    提取视频评论

    模拟滚动评论区 + 接口抓取

    三、实战步骤详解

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

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

    import requestsdef 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)

    from xml.etree import ElementTreedef 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模拟浏览器)

    import asyncio
    from playwright.async_api import async_playwright
    import jsonasync 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:passpage.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"))

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

    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 替代方案

     六、爬虫工具推荐

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

      http://www.lryc.cn/news/612130.html

      相关文章:

    1. 2025年高防IP隐身术:四层架构拆解源站IP“消失之谜”
    2. 微算法科技(NASDAQ:MLGO)利用鸽群分散算法,提高区块链交易匹配算法效能
    3. Kafka ISR机制和Raft区别:副本数优化的秘密
    4. 智能提示词引擎的革新与应用:PromptPilot使用全解析
    5. 北京JAVA基础面试30天打卡03
    6. PDF注释的加载和保存的实现
    7. Go语言数据类型深度解析:位、字节与进制
    8. Git 乱码文件处理全流程指南:从识别到彻底清除
    9. NodeJs学习日志(1):windows安装使用node.js 安装express,suquelize,sqlite,nodemon
    10. 将英文PDF文件完整地翻译成中文的4类方式
    11. jspdf或react-to-pdf等pdf报错解决办法
    12. 使用阿里云服务器部署dify实战
    13. Linux_详解进程信号
    14. Python在大数据时代的角色与挑战:连接数据与智能的关键引擎
    15. 大数据之HBase
    16. 数字驾驶舱是什么意思?如何搭建驾驶舱
    17. Hive【应用 04】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
    18. 技术博客:从HTML提取到PDF生成的完整解决方案
    19. 周志华院士西瓜书实战(二)MLP+SVM+贝叶斯分类器+决策树+集成学习
    20. 19day-人工智能-机器学习-分类算法-决策树
    21. 在LLM小型化趋势下,AI Infra需要做出哪些相应调整?
    22. TrustZone技术详解————这篇是AI写的包括图
    23. [滑动窗口]904. 水果成篮
    24. Vue Router 路由的创建和基本使用(超详细)
    25. BM89 合并区间
    26. Diamond基础1:认识Lattice器件
    27. 三维偏序 -- cdq 套 cdq
    28. 一文读懂:什么是CLIP
    29. 目录遍历漏洞学习
    30. 560. 和为 K 的子数组 - 前缀和思想