MediaCrawler 小红书抖音爬虫完整指南:如何从零跑通7平台数据抓取
【免费下载链接】MediaCrawler小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 | 评论爬虫、微博帖子 | 评论爬虫、百度贴吧帖子 | 百度贴吧评论回复爬虫 | 知乎问答文章|评论爬虫项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler
MediaCrawler 是一个开源社交媒体数据采集工具,支持小红书、抖音、快手、B站、微博、百度贴吧、知乎 7 个平台,可按关键词、按帖子、按创作者主页三种方式批量抓取笔记/视频内容及评论、二级评论,结果可存成 JSON、CSV、Excel 或数据库。用它的多是负责选题、竞品监控、舆情分析的运营和产品,以及不想自己逆向平台前端签名的开发者。核心技术思路一句话:不逆向 X-S 这类签名算法,而是用 Playwright 驱动真实浏览器完成登录和请求,让签名参数在页面环境里直接产出——请求走的是真实浏览器行为,平台很难把它和普通用户流量区分开。
前置条件与首次运行:5分钟跑通第一个采集任务
开始前的检查清单:
| 依赖项 | 版本要求 | 为什么需要 |
|---|---|---|
| Python | ≥ 3.11 | 项目pyproject.toml明确要求requires-python = ">=3.11" |
| Node.js | v16 及以上 | 抖音、知乎的签名逻辑通过 JS 脚本执行,依赖本地 Node 环境 |
| Chrome 浏览器 | 近期版本 | CDP 模式要复用你的真实浏览器登录态 |
| uv | 任意较新版本 | 一条命令装全部依赖 |
克隆仓库并安装依赖,一共三条命令:
git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler cd MediaCrawler uv sync接着开启 Chrome 远程调试:地址栏输入chrome://inspect/#remote-debugging,勾选 "Allow remote debugging for this browser instance",页面出现Server running at: 127.0.0.1:9222即就绪。因为ENABLE_CDP_MODE和CDP_CONNECT_EXISTING默认都是True,程序会直接连接这个浏览器实例,复用你的 Cookie、扩展和浏览历史,被风控识别的概率比启动一个干净的 Playwright 浏览器低。不想每次手动开启的话,看 CDP模式使用指南。
然后运行:
python main.py首次运行弹出浏览器窗口,扫码登录(LOGIN_TYPE默认qrcode,也支持phone手机号登录,说明见 手机号登录说明)。登录态会写入本地浏览器数据目录(USER_DATA_DIR默认{平台名}_user_data_dir),所以第二次起免扫码。项目还带一个 WebUI 控制台,可以可视化配置任务和监控运行,界面如下:
跑完后去data/目录看结果文件。
配置速查表:改 config/base_config.py 的这组开关就够
所有通用配置集中在 config/base_config.py,各平台专属列表在config/xhs_config.py、config/dy_config.py等文件里。按用途分组:
| 用途 | 配置项 | 默认值 | 什么时候改 |
|---|---|---|---|
| 取数方式 | PLATFORM | "xhs" | 切平台时改,取值 xhs/dy/ks/bili/wb/tieba/zhihu |
| 取数方式 | CRAWLER_TYPE | "search" | 要抓指定帖子改detail,抓主页改creator |
| 取数方式 | KEYWORDS | "编程副业,编程兼职" | search模式下填关键词,多个用英文逗号分隔 |
| 取数方式 | CRAWLER_MAX_NOTES_COUNT | 15 | 需要更多条数时调大,如 50 |
| 评论深度 | ENABLE_GET_COMMENTS | True | 只想要正文、不要评论时关掉,能省请求 |
| 评论深度 | CRAWLER_MAX_COMMENTS_COUNT_SINGLENOTES | 10 | 单篇想抓更多评论时调大 |
| 评论深度 | ENABLE_GET_SUB_COMMENTS | False | 需要钻取二级评论时打开 |
| 存储出口 | SAVE_DATA_OPTION | "jsonl" | 给人看改excel/csv,长期跑同一批对象改sqlite/postgres(入库自动建表、自带去重) |
| 存储出口 | SAVE_DATA_PATH | 空,即存到data/ | 想换目录时填 |
| 风控开关 | CRAWLER_MAX_SLEEP_SEC | 2(秒) | 大批量任务调大到 3~5 秒 |
| 风控开关 | MAX_CONCURRENCY_NUM | 1 | 稳定后再逐步上调,别一上来就加并发 |
| 风控开关 | ENABLE_IP_PROXY | False | 量上来了再开,配合IP_PROXY_PROVIDER_NAME选服务商 |
| 登录态 | SAVE_LOGIN_STATE | True | 保持开启即可;换账号时删除对应平台浏览器数据目录 |
| 登录态 | HEADLESS | False | 触发滑块验证时保持False,才能手动过验证 |
两个容易忽略的点:词云开关ENABLE_GET_WORDCLOUD默认False,且只在SAVE_DATA_OPTION为json/jsonl时才会在采集结束后生成,停用词表是 docs/hit_stopwords.txt,用法见 词云图使用配置;媒体下载开关ENABLE_GET_MEDIA默认False,只要元数据就别开,省带宽和磁盘。各存储格式的差异见 数据存储指南。
按目标取数:你要什么数据,就配哪组参数
对号入座,左列是目标,中间是配置组合,右列是产出:
| 你想拿到什么 | 配置组合 | 产出 |
|---|---|---|
| 关键词下的小红书笔记 | PLATFORM="xhs"、CRAWLER_TYPE="search"、KEYWORDS填词 | data/里该词笔记列表:标题、点赞收藏评论数、正文,默认含一级评论 |
| 指定几篇小红书笔记的完整数据 | CRAWLER_TYPE="detail",把带xsec_token的完整 URL 填进 config/xhs_config.py 的XHS_SPECIFIED_NOTE_URL_LIST | 单篇完整字段 + 评论,URL 直接从浏览器地址栏复制 |
| 某创作者的全部笔记 | CRAWLER_TYPE="creator",主页 URL 填进XHS_CREATOR_ID_LIST | 该创作者发布过的笔记及数据 |
| 抖音视频内容 | PLATFORM="dy",DY_SPECIFIED_ID_LIST支持完整 URL、分享短链、纯视频 ID 三种填法 | 视频正文 + 评论,签名依赖 Node.js |
| B站账号更新节奏 | PLATFORM="bili"、CRAWLER_TYPE="creator",空间主页 URL 或 UID 填进 config/bilibili_config.py 的BILI_CREATOR_ID_LIST | 账号视频列表,还可用START_DAY/END_DAY限定时间范围 |
| 知乎问答/文章 | PLATFORM="zhihu",ZHIHU_SPECIFIED_ID_LIST支持回答、专栏、视频三类 URL | 回答/文章正文 + 评论 |
快手(KS_SPECIFIED_ID_LIST/KS_CREATOR_ID_LIST)、微博(WEIBO_SPECIFIED_ID_LIST/WEIBO_CREATOR_ID_LIST)、贴吧(TIEBA_NAME_LIST/TIEBA_CREATOR_URL_LIST)填法相同,都是"列表 + 对应 CRAWLER_TYPE"。
如何设置才不被风控:四个决策点按顺序过一遍
风控问题本质是"频率、身份、IP"三个维度的取舍,按这个顺序做决策:
- 先压频率。
CRAWLER_MAX_SLEEP_SEC默认 2 秒,大批量任务调大到 3~5 秒。代价是总耗时变长,换来的是账号安全,这是最便宜的一道保险。 - 并发保持 1。
MAX_CONCURRENCY_NUM默认 1,稳定运行后再考虑上调——盲目加并发是触发风控最常见的原因之一。 - 登录态尽量复用。
SAVE_LOGIN_STATE保持True+CDP_CONNECT_EXISTING保持True,让每次请求都带着真实浏览器的登录身份出现。已经触发风控时:把HEADLESS设为False重启手动过一次滑块,仍不行就删除该平台的浏览器数据目录、换一个账号重新登录。 - 量大就上代理池。
ENABLE_IP_PROXY默认False,需要批量长期跑时开启,IP_PROXY_PROVIDER_NAME支持kuaidaili、wandouhttp、static三种取值。proxy/ 目录下的 IP 池启动时从服务商拉一批 IP、逐个验证可用性后随机轮换,失效自动补新,把风险从单账号单 IP 上分散掉。服务商的用户名密码通过环境变量传入,配置方法见 代理使用文档:
故障自查:现象 → 最可能原因 → 处理顺序
| 现象 | 最可能原因 | 处理顺序 |
|---|---|---|
| 小红书扫码后反复弹滑块 | 请求被识别为脚本 | ① 确认ENABLE_CDP_MODE与CDP_CONNECT_EXISTING均为True②HEADLESS=False重启后手动过滑块 ③ 删除平台浏览器数据目录重新登录 |
execjs ProgramError等 JS 报错(抖音、知乎) | 本地没有 Node.js 环境 | ① 检查 Node.js 是否 v16 及以上 ② 未装则安装后重启终端再跑 |
| 之前正常,突然抓不到数据或报错 | 账号触发平台风控 | ① 调大CRAWLER_MAX_SLEEP_SEC② 减小单次采集条数 ③ 开启代理池 ④ 删浏览器数据目录换账号 |
TimeoutError或连不上 9222 端口 | 远程调试没开或浏览器被关 | ① 确认 Chrome 处于打开状态 ② 回chrome://inspect/#remote-debugging确认已勾选 ③ 确认页面显示127.0.0.1:9222④ 浏览器弹确认框时点"接受",程序会等待约 60 秒 ⑤ 仍超时先查本地网络/代理设置 |
更多情况见 常见问题。
接下来按顺序做这 3 件事
- 先跑通最小闭环:
PLATFORM="xhs"、CRAWLER_TYPE="search"、SAVE_DATA_OPTION="jsonl"不改其他项,确认data/里生成的文件字段齐全、评论抓到了。 - 再对号入座改配置:按"按目标取数"一节的表切换到你的目标平台和
CRAWLER_TYPE,需要更多条数时把CRAWLER_MAX_NOTES_COUNT从默认 15 调大。 - 最后做风控保障:长期跑的对象改存
sqlite/postgres利用入库去重,任务量上来后开启ENABLE_IP_PROXY并调大CRAWLER_MAX_SLEEP_SEC,让采集能持续跑而不是跑两天就死号。
【免费下载链接】MediaCrawler小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 | 评论爬虫、微博帖子 | 评论爬虫、百度贴吧帖子 | 百度贴吧评论回复爬虫 | 知乎问答文章|评论爬虫项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考