如何用MediaCrawler爬取小红书抖音数据?7大平台爬虫从安装到实战完整指南

【免费下载链接】MediaCrawler 小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 | 评论爬虫、微博帖子 | 评论爬虫、百度贴吧帖子 | 百度贴吧评论回复爬虫 | 知乎问答文章|评论爬虫 【免费下载链接】MediaCrawler 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler

MediaCrawler 是一个支持小红书、抖音、快手、B站、微博、百度贴吧、知乎的开源自媒体数据采集工具。它能按关键词、按帖子、按创作者主页三种方式抓取笔记/视频内容、评论甚至二级评论,并把结果存成 JSON、CSV、Excel 或数据库。适合做市场调研、竞品监控、内容选题的运营人员,以及想要现成爬虫框架而不想从零写 JS 逆向的开发者。

从一次"手动抄数据"说起

想象这个场景:你负责某新消费品牌的内容投放,想看看小红书上"平价精华"这个话题下热度最高的 50 篇笔记、它们各自的评论量和评论区在吐槽什么。手动一篇篇点开复制,半天下来只整理了 20 条,评论区根本没碰;换到抖音、B站再来一遍,时间直接翻倍。

MediaCrawler 解决的就是这类"跨平台、批量、带评论"的采集需求。它的核心思路是:不逆向平台前端的加密签名算法,而是用 Playwright 驱动真实浏览器完成登录和请求,让签名参数直接由页面环境产出。对你来说这意味着两件事——不需要研究 X-S 签名这类底层细节,也能把小红书登录态保存下来下次直接用,不用反复扫码。

MediaCrawler Web控制台运行界面

5 分钟搭好采集环境并跑通第一个任务

第 1 步:准备运行环境

需要 Python 3.11 以上版本,以及一个较新版本的 Chrome 浏览器(建议 144 以上,用于后续 CDP 模式复用真实登录态)。

第 2 步:克隆仓库并安装依赖

git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler
cd MediaCrawler
uv sync

uv sync 一条命令完成依赖安装。抖音、知乎的签名逻辑依赖 Node.js,如果你的环境要爬这两个平台,提前装好 Node.js(v16 及以上)即可。

第 3 步:打开 Chrome 远程调试

CDP 模式是本项目推荐的反检测方案:程序直接连接你日常在用的浏览器,复用真实 Cookie、扩展和浏览历史,平台很难把这次请求和普通用户区分开。开启方式:

  1. 在 Chrome 地址栏输入 chrome://inspect/#remote-debugging
  2. 勾选 "Allow remote debugging for this browser instance"
  3. 页面显示 Server running at: 127.0.0.1:9222 即成功

更多细节可参考项目内的 CDP模式使用指南

第 4 步:改 4 个配置项

打开 config/base_config.py,只改下面这些就能跑:

PLATFORM = "xhs"                    # 目标平台:xhs|dy|ks|bili|wb|tieba|zhihu
KEYWORDS = "平价精华"               # 搜索关键词,多个用英文逗号分隔
CRAWLER_TYPE = "search"            # search 搜索 | detail 指定帖子 | creator 创作者主页
SAVE_DATA_OPTION = "json"           # 保存格式:json|csv|excel|sqlite|postgres 等

ENABLE_CDP_MODECDP_CONNECT_EXISTING 默认为 True,即自动连接你已开启远程调试的 Chrome,无需额外修改。

第 5 步:运行并扫码登录

python main.py

首次运行会弹出浏览器窗口,用账号扫码登录(支持二维码、手机号两种方式)。登录状态会缓存到本地浏览器数据目录,后续运行免扫码。完成后去 data/ 目录查看结果文件。

功能拆解:按模块看懂它能做什么

三种爬取方式,覆盖不同取数目的

方式 配置值 输入 产出
关键词搜索 search KEYWORDS 里的关键词 搜索结果页的笔记/视频列表及评论
指定帖子 detail 各平台配置里的指定 URL/ID 列表 单条内容的完整字段与评论
创作者主页 creator 各平台配置里的主页 URL 列表 该创作者发布的全部内容

以小红书为例,指定帖子列表在 config/xhs_config.pyXHS_SPECIFIED_NOTE_URL_LIST 中填写,注意链接需要带 xsec_token 参数(从浏览器地址栏直接复制完整 URL 即可)。

评论采集与词云:把评论区变成分析素材

评论是多数分析场景里最有价值的部分,相关开关都在 config/base_config.py

  • ENABLE_GET_COMMENTS = True(默认开启):抓取一级评论
  • CRAWLER_MAX_COMMENTS_COUNT_SINGLENOTES:控制单篇内容最多抓多少条评论
  • ENABLE_GET_SUB_COMMENTS:是否继续抓二级评论,默认关闭
  • ENABLE_GET_WORDCLOUD = True:抓完评论后自动生成词云图

词云需要配合停用词表使用,停用词写在 docs/hit_stopwords.txt(一词一行),完整用法见 词云图使用配置。适合做"用户到底在讨论什么"的可视化汇报。

代理 IP 池:大规模采集的保命配置

单 IP 高频请求很容易被风控。项目在 proxy/ 目录下内置了代理池:启动时从服务商拉取一批 IP,逐个验证可用性后随机轮换,IP 失效或过期自动补新。支持快代理、极速 HTTP、豌豆 HTTP 及静态代理四种方式,通过 ENABLE_IP_PROXYIP_PROXY_PROVIDER_NAME 两个开关控制。

以快代理为例,先在服务商后台开通免费试用:

快代理免费代理IP列表界面

按需求选择产品类型,隧道代理适合对 IP 质量要求高的场景:

代理IP产品类型选择界面

服务商提供的用户名密码或 API 密钥,通过环境变量传给项目,配置位置可参考 代理使用文档

代理密钥环境变量配置说明

多格式存储:一份数据,多种出口

存储实现在 store/ 目录,按平台划分。SAVE_DATA_OPTION 一个开关切换出口:

  • json / jsonl:默认推荐,方便后续用 Python 处理
  • excel / csv:给运营同事直接打开看
  • sqlite / postgres / db:入库后天然带去重,适合长期反复采集同一批对象
  • mongodb:数据量大时的扩展方案

入库模式支持自动建表,首次运行不会出现"表不存在"的报错。各格式的详细说明见 数据存储指南

实战:三个典型场景的完整走法

场景一:新品上市前的小红书竞品声量摸底

  • 输入:竞品品牌名 + 品类关键词,如"某某面霜,修护精华"
  • 操作PLATFORM = "xhs"CRAWLER_TYPE = "search"KEYWORDS 填入关键词,CRAWLER_MAX_NOTES_COUNT 调到 50,运行 python main.py
  • 产出:json 文件里包含笔记标题、点赞收藏评论数、发布时间、正文;打开 ENABLE_GET_WORDCLOUD 还能直接拿到评论区词云图,一眼看出用户在意的卖点和槽点

场景二:B站竞品账号的更新节奏监控

  • 输入:竞品账号的主页 URL
  • 操作PLATFORM = "bili"CRAWLER_TYPE = "creator",主页链接填入 config/bilibili_config.py 对应列表
  • 产出:该账号近期全部视频列表(标题、播放量、发布时间),定期跑一次就能对比更新频率和内容方向变化,不用手动刷主页

场景三:知乎问答的舆情收集

  • 输入:行业相关问题的关键词
  • 操作PLATFORM = "zhihu"CRAWLER_TYPE = "search",把评论抓取数量调大
  • 产出:问题列表、回答正文及评论,入库后用数据库按发布时间排序,即可做话题热度的时间序列分析

常见坑:4 个高频问题的排查步骤

小红书扫码后一直弹滑块验证

现象:扫码成功后浏览器反复出现滑块,登录卡死。

  1. 确认使用 CDP 模式连接真实浏览器(ENABLE_CDP_MODECDP_CONNECT_EXISTING 均为 True),不要换成无痕窗口
  2. HEADLESS 设为 False,重启项目后在弹出的浏览器里手动过一次滑块
  3. 若仍不行,删除项目根目录下的 brower_data/ 文件夹,重新走一遍登录流程

报 execjs 或 JS 相关错误(主要出现在抖音、知乎)

现象:execjs._exceptions.ProgramError: SyntaxError 或类似 JS 执行报错。

  1. 检查是否安装了 Node.js 环境,版本需 v16 及以上
  2. 未安装则前往 Node.js 官网下载安装对应系统的安装包
  3. 重启终端后再次运行项目

一开始正常,跑一段时间后突然失效

现象:相同代码前几天还正常,现在抓不到数据或直接报错。

  1. 判断是否为账号触发平台风控(这是最常见原因)
  2. 降低请求强度:调大 CRAWLER_MAX_SLEEP_SEC(请求间隔,默认 2 秒)、减小单次采集条数
  3. 开启代理池分散 IP(参考上文代理模块)
  4. 删除 brower_data/ 更换账号后重新登录,避开短期频繁操作的账号

报 Timeout 超时或 CDP 连不上浏览器

现象:playwright TimeoutErrorCannot connect to existing browser on port 9222

  1. 确认 Chrome 处于打开状态,且版本 ≥ 144(地址栏输入 chrome://version 查看)
  2. 回到 chrome://inspect/#remote-debugging,确认已勾选远程调试开关
  3. 确认页面显示 Server running at: 127.0.0.1:9222,没有该行说明调试端口未成功开启
  4. 若浏览器弹出确认对话框,点击"接受",程序会等待约 60 秒内的人工确认
  5. 网络不通导致的超时,先检查本地网络/代理设置是否正常

提效技巧:让采集更稳更快的清单

  • 控频率CRAWLER_MAX_SLEEP_SEC 默认 2 秒,大批量任务建议加到 3~5 秒,换来的是账号安全
  • 限并发MAX_CONCURRENCY_NUM 保持 1 起步,稳定后再逐步上调,盲目并发是触发风控的常见原因
  • 复用登录态SAVE_LOGIN_STATE 保持开启,登录一次长期免扫码;想换账号删 brower_data/ 即可
  • 选对存储格式:一次性分析用 json/csv;长期跑同一对象用 sqlite/postgres 入库去重;给非技术同事看用 excel
  • 按需抓媒体ENABLE_GET_MEIDAS 默认关闭,只下载元数据时保持关闭,省带宽也省磁盘
  • 浏览器管理AUTO_CLOSE_BROWSER 默认在程序结束时关闭浏览器,调试阶段可设为 False 留着现场排查问题

总结

MediaCrawler 把七平台数据采集收敛到了"改配置 + 跑 main.py"两步:用浏览器自动化绕开 JS 逆向,用 CDP 模式复用真实登录态,用代理池和多格式存储应对规模化需求。新手建议从关键词搜索 + json 存储跑通第一条链路,再按场景逐步开启评论、词云、代理池等能力。现在就克隆仓库,改好 4 个配置项,跑通你的第一个采集任务吧。

【免费下载链接】MediaCrawler 小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 | 评论爬虫、微博帖子 | 评论爬虫、百度贴吧帖子 | 百度贴吧评论回复爬虫 | 知乎问答文章|评论爬虫 【免费下载链接】MediaCrawler 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler

更多推荐