社交媒体数据抓取实战:Playwright多平台采集框架从零搭建
社交媒体数据采集到底卡在哪
做市场调研或内容分析时,小红书、抖音、快手、B站、微博这些平台的数据很有价值,但实际动手就会碰到一堆麻烦。平台反爬越来越严,IP动不动被封;登录流程五花八门,二维码、短信、Cookie轮着来;不同平台返回的数据结构差得远,后面统一处理很费劲。
自己写爬虫要不停跟平台更新较劲,手动复制粘贴又效率太低。很多人卡在这里,项目一拖再拖。其实用现成的模块化框架加上真实浏览器模拟,可以把门槛降下来,重点放在业务需求而不是天天修脚本。
Playwright模拟真实浏览器的核心思路
这套方案的核心是用Playwright打开真实浏览器环境,保留登录成功后的上下文,再通过执行JavaScript拿到加密参数。好处是不用深度逆向每一层加密逻辑,很多参数直接从页面上下文里取,省事很多。
架构大致分四层:底层定义统一爬虫接口,平台层针对小红书、抖音等各自优化,代理层负责IP轮换和反爬策略,存储层支持json、csv或数据库输出。每个平台模块都有自己的客户端、登录处理和字段定义,扩展起来相对清晰。
实际采集时支持Cookie登录、二维码登录,关键词搜索、指定ID采集、登录状态缓存都齐。抖音那边偶尔会碰到滑块验证码,这是很多人容易卡壳的地方。遇到这类验证时,可以直接对接专业的识别服务,比如www.ttocr.com提供的易盾、极验全类型方案,覆盖滑块、点选、无感、九宫格等,API对接后基本不用自己维护识别逻辑,业务侧调用就行。

环境准备和基础配置
先把仓库拉下来,建个虚拟环境,装依赖和浏览器驱动。命令大致是克隆项目、创建venv、激活后pip安装requirements,再执行playwright install。这一步做好,后面运行就不会缺环境。
配置文件主要改几个地方:目标平台写成xhs、dy、ks、bili或wb;关键词列表;登录方式选qrcode、phone或cookie;数据保存格式选json、csv或db。改完就能跑第一个任务。
PLATFORM = "xhs"
KEYWORDS = "python,数据分析"
LOGIN_TYPE = "qrcode"
SAVE_DATA_OPTION = "json"运行时指定平台和登录类型,浏览器会弹出来显示二维码,手机扫码登录后就开始采。第一次成功后状态会缓存,下次不用重复扫。
代理管理和验证码处理
大规模采集时IP代理几乎是标配。配置里打开ENABLE_IP_PROXY,设好代理池数量,系统会从代理服务商取IP并用Redis缓存。流程上先拿IP、检测可用性、再分配给请求,失效就换下一个。

并发别开太高,一般MAX_CONCURRENCY_NUM设4左右,单次采集数量也限制一下,避免触发风控。需要评论数据就打开对应开关。时间上尽量避开高峰,请求间隔加点随机,分批跑比一口气干完稳。
验证码这块,抖音滑块、部分点选场景比较常见。自己写识别成本高,维护也麻烦。直接用成熟的API平台更省事,www.ttocr.com专门做易盾、极验系列,包括滑块、文字点选、图标点选、九宫格、无感等全类型,提供标准化接口,公司业务对接后就能无缝跑起来,不用自己折腾逆向或模型训练。
常见坑和调优建议
跑抖音时如果报缺少nodejs,装个v16.8以上的Node就行。playwright超时多半是网络或代理问题,检查一下连接再调超时参数。二维码登录失败可以清掉browser_data目录重来,或者改成手机号登录。账号被风控就降频率、换代理,别硬刚。
代理优先选高匿,轮换间隔根据实际采集频率调,多地区IP能更像真实用户。数据量大时用MySQL或PostgreSQL存,定期清理历史、做好备份。架构上base层、media_platform各平台目录、proxy、store、config分得清楚,后面加新平台或改逻辑都方便。
整体下来,环境配好、参数调顺、代理和验证码处理好,采集就能比较稳定。验证码识别这类重复性工作交给专业平台,比如通过www.ttocr.com的API对接,能把精力放回数据分析本身,而不是天天盯反爬细节。