一、项目简介
该代码基于 Playwright 自动化框架,通过接管本地 Edge 浏览器,实现对抖音视频评论区的数据采集,并最终导出为 CSV 文件。
相比传统接口抓取方式,本方案采用:
✅ 前端 DOM 抓取 + 浏览器自动化
具有更强的稳定性和更低的风控风险。
二、核心功能
该脚本主要实现以下功能:
- 自动启动或接管 Edge 浏览器(支持复用登录状态)
- 打开指定抖音视频页面
- 自动滚动加载评论
- 解析评论数据(用户名、内容、时间、地区)
- 去重处理,避免重复采集
- 导出 CSV 文件
三、整体流程
text
启动浏览器 → 打开页面 → 等待评论加载 → 滚动页面 → 采集评论 → 数据解析 → 写入CSV
四、关键模块解析
1️⃣ 浏览器接管(绕过登录限制)
python
browser = p.chromium.connect_over_cdp(f"http://localhost:{DEBUG_PORT}")
说明:
- 使用 CDP(Chrome DevTools Protocol)连接本地 Edge 浏览器
- 避免 Playwright 自动化浏览器被识别
- 可复用用户登录状态(非常关键)
配合启动参数:
bash
--remote-debugging-port=9222
--user-data-dir=C:\edge-debug
作用:
- 开启调试端口
- 保存浏览器用户数据(cookies / 登录信息)
2️⃣ 评论加载检测
python
page.locator('[data-e2e="comment-item"]').count()
说明:
- 通过 DOM 元素判断评论是否加载完成
data-e2e="comment-item"是抖音评论节点标识
3️⃣ 滚动加载机制
python
page.mouse.wheel(0, SCROLL_STEP)
说明:
- 模拟用户滚动页面
- 触发抖音"懒加载"机制加载更多评论
关键参数:
| 参数 | 说明 |
|---|---|
| SCROLL_STEP | 每次滚动距离 |
| SCROLL_WAIT | 滚动后等待时间 |
| MAX_ROUNDS | 最大滚动次数 |
4️⃣ 评论采集(核心逻辑)
python
comments = page.evaluate("""
() => Array.from(document.querySelectorAll('[data-e2e="comment-item"]'))
.map(el => el.innerText)
""")
说明:
- 在浏览器中执行 JavaScript
- 获取所有评论节点的文本内容
- 直接读取页面渲染数据(无需接口)
5️⃣ 数据去重
python
seen = set()
key = user + content
说明:
- 使用 Set 记录已采集数据
- 避免重复写入 CSV
6️⃣ 评论解析
python
def parse_comment(text):
主要功能:
- 提取用户名
- 提取评论内容
- 提取时间(如:2小时前)
- 提取地区(如:北京)
使用正则:
python
(\d+分钟前|\d+小时前|\d+天前)[· ]([\u4e00-\u9fa5]+)
7️⃣ 子评论展开(可选)
python
text=/展开\d+条回复/
说明:
- 自动点击"展开回复"按钮
- 采集子评论数据
8️⃣ 结束条件控制
python
if current_height == last_height and new_count == 0:
说明:
当满足以下条件时停止采集:
- 页面高度不再变化
- 没有新增评论
避免死循环。
9️⃣ 数据导出
python
writer.writerow(["用户名", "评论内容", "时间", "地区"])
说明:
- 使用 CSV 存储结果
- 编码为 UTF-8(兼容 Excel)
五、方案特点
✅ 优点
- 无需分析接口(避免签名、加密问题)
- 使用真实浏览器,降低被封风险
- 支持登录态,适用于完整评论采集
- 逻辑清晰,易扩展
⚠️ 注意点
- 依赖页面 DOM 结构(抖音更新可能影响)
- 评论解析基于文本规则,存在一定误差
- 采集速度受页面加载影响
六、适用场景
该方案适用于:
- 自媒体选题分析(高频评论挖掘)
- 用户反馈收集
- 舆情分析
- 数据集构建
七、总结
该代码实现了一套基于浏览器自动化的评论采集流程,核心思路是:
👉 通过模拟用户行为获取前端渲染数据,而非直接调用接口
这种方式在当前环境下具有较好的稳定性和实用性,适合用于中小规模的数据采集任务。