Crawler之Tool:MediaCrawler的简介、安装和使用方法、案例应用之详细攻略
目录
[使用 uv 安装](#使用 uv 安装)
[配置 Chrome 与 CDP](#配置 Chrome 与 CDP)
[使用 Python 原生 venv](#使用 Python 原生 venv)
[根据指定帖子 ID 获取详情](#根据指定帖子 ID 获取详情)
[使用 WebUI](#使用 WebUI)
[案例二:指定小红书帖子 ID 采集详情](#案例二:指定小红书帖子 ID 采集详情)
[案例四:SQLite 本地存储采集结果](#案例四:SQLite 本地存储采集结果)
[案例五:Excel 格式导出分析](#案例五:Excel 格式导出分析)
[案例六:使用 WebUI 完成可视化采集](#案例六:使用 WebUI 完成可视化采集)
MediaCrawler的简介

MediaCrawler 是一个多平台自媒体数据采集工具,项目 README 明确说明其支持小红书、抖音、快手、B 站、微博、贴吧、知乎等主流平台的公开信息抓取。项目架构文档进一步将其定位为一个多平台自媒体爬虫框架,采用 Python 异步编程实现,能够面向这些平台采集内容、评论和创作者信息,并通过统一的爬虫接口组织不同平台的实现。
在技术实现方面,项目以 Playwright 浏览器自动化为核心:通过浏览器环境登录并保存登录态,再利用保留登录态的浏览器上下文,通过 JavaScript 表达式获取签名参数。README 强调,这种方式不需要直接逆向复杂的加密算法。当前项目还提供 CDP 模式,用于连接已有 Chrome 浏览器并复用其登录状态、Cookie 和扩展;同时提供标准 Playwright 模式作为可切换方案。
在数据处理方面,MediaCrawler 提供多种存储后端,包括 CSV、JSON、JSONL、Excel、SQLite 和 MySQL;项目还提供 WebUI,可用于可视化配置爬虫参数、查看运行状态和日志、预览与导出数据。整体项目由 main.py、base、config、media_platform、store、api、webui 等目录和模块组成,使平台爬虫、配置、数据存储以及 Web 操作界面形成相对独立的组成部分。
Guthub地址 :https://github.com/NanmiCoder/MediaCrawler
1 、特点
|-----------------------------|-------------------------------------------------------------------------------------|
| 特点 | 详细说明 |
| 多平台支持 | 当前项目支持小红书、抖音、快手、B 站、微博、百度贴吧和知乎等平台;项目架构文档按平台给出了搜索、详情、创作者或答主等功能。 |
| 统一爬虫接口 | 项目架构文档指出,MediaCrawler 使用统一的爬虫接口支持 7 大主流平台,并在 media_platform/ 下按平台组织具体实现。 |
| Playwright 浏览器自动化 | 项目使用 Playwright 进行浏览器自动化登录并保存登录态,再通过浏览器上下文获取签名参数。 |
| CDP 模式 | 项目默认使用 CDP 模式连接用户已有 Chrome,可以复用已有登录状态、Cookie 和扩展;也可以通过配置关闭 CDP,切换到标准 Playwright 模式。 |
| 多种采集类型 | README 的功能表覆盖关键词搜索、指定帖子 ID 爬取、二级评论、指定创作者主页等能力。 |
| 登录态缓存 | 功能矩阵明确列出了登录态缓存能力,当前项目的 Chrome/CDP 工作方式也支持复用已有登录状态。 |
| IP 代理池 | README 的平台能力表将 IP 代理池列为功能项,并对各平台进行了支持标记。 |
| 评论词云 | 项目功能表包含生成评论词云图能力,相关平台均在表中标记支持。 |
| 异步高并发 | 项目架构文档明确说明采用基于 asyncio 的异步架构,用于实现并发爬取。 |
| 多种数据存储 | 支持 CSV、JSON、JSONL、Excel、SQLite 和 MySQL,项目还提供独立的数据存储和 Excel 导出文档。 |
| WebUI | 项目提供基于 Web 的可视化操作界面,可配置平台、登录方式、爬取类型,实时查看任务状态和日志,并进行数据预览与导出。 |
| Python 与 Node.js 配合 | 项目建议使用 Python 3.11,并要求 Node.js >=16.0.0;抖音和知乎等平台需要 Node.js 环境。 |
MediaCrawler的安装和使用方法
1、安装
使用 uv 安装
项目文档推荐使用 uv 管理依赖。进入项目后使用 uv sync 同步 Python 依赖;Python 版本建议使用 3.11,项目还要求 Node.js 版本 >=16.0.0。
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler
uv sync
如果采用标准 Playwright 模式,需要安装浏览器驱动:
uv run playwright install
项目当前默认采用 CDP 模式连接已有 Chrome,因此在这种默认模式下无需安装 Playwright 浏览器驱动。
配置 Chrome 与 CDP
项目 README 当前给出的推荐方式是使用 Chrome CDP。需要安装版本 >=144 的 Chrome,然后打开:
chrome://inspect/#remote-debugging
勾选 Allow remote debugging for this browser instance,当页面显示:
Server running at: 127.0.0.1:9222
即表示远程调试已就绪。运行爬虫后,Chrome 可能弹出确认对话框,需要点击"接受";项目说明程序会等待用户确认,60 秒内完成即可。
如果不使用 CDP,可在 config/base_config.py 中设置:
ENABLE_CDP_MODE = False
从而切换到标准 Playwright 模式。
使用 Python 原生 venv
项目同时提供 Python 原生虚拟环境方案,不过项目文档将其标记为"不推荐"。以 Python 3.11 为例:
cd MediaCrawler
python -m venv venv
macOS/Linux 激活:
source venv/bin/activate
Windows 激活:
venv\Scripts\activate
然后安装依赖和 Playwright 浏览器驱动:
pip install -r requirements.txt
playwright install
如果使用抖音或知乎,项目文档要求提前准备 Node.js >=16。
2、使用方法
关键词搜索并抓取内容与评论
项目提供的基本命令为:
uv run main.py --platform xhs --lt qrcode --type search
该命令从配置文件读取关键词搜索相关内容,并爬取帖子信息与评论。项目 README 的示例使用小红书平台代码 xhs 和二维码登录方式 qrcode。运行过程中按照项目提示打开对应 App 扫描二维码登录。
根据指定帖子 ID 获取详情
可以使用:
uv run main.py --platform xhs --lt qrcode --type detail
该模式从配置文件读取指定的帖子 ID 列表,获取指定帖子的内容及评论信息。
项目默认没有开启评论爬取模式,如需启用评论,应在 config/base_config.py 中修改 ENABLE_GET_COMMENTS;其他功能开关也集中在该配置文件中,并提供中文注释。
查看其他平台命令
可以直接执行:
uv run main.py --help
项目文档通过该命令查看其他平台爬虫的使用示例。
使用数据存储选项
项目支持 CSV、JSON、JSONL、Excel、SQLite 和 MySQL。
例如,项目文档给出了使用 SQLite 的命令:
uv run main.py --platform xhs --lt qrcode --type search --save_data_option sqlite
使用 MySQL:
uv run main.py --platform xhs --lt qrcode --type search --save_data_option db
SQLite 被项目文档列为轻量级、无需服务器的数据库方式;MySQL 则需要预先创建数据库。
使用 Excel 导出
项目单独提供了 Excel 导出指南。首先确保 openpyxl 已安装:
uv sync
也可以直接:
pip install openpyxl
然后在 config/base_config.py 中设置:
SAVE_DATA_OPTION = "excel"
例如抓取小红书:
uv run main.py --platform xhs --lt qrcode --type search
项目文档说明生成的 Excel 文件保存在 data/{platform}/ 目录,文件名格式为:
{platform}{crawler_type}{timestamp}.xlsx
例如:
xhs_search_20250128_143025.xlsx
也可以通过命令行直接指定:
uv run main.py --platform xhs --lt qrcode --type search --save_data_option excel
使用 WebUI
MediaCrawler 提供 WebUI。开发调试模式需要同时启动 API 服务和前端 Vite 开发服务器:
uv run uvicorn api.main:app --port 8080 --reload
另开终端:
cd webui
npm install
npm run dev
前端默认运行在 5173 端口,并代理 /api 到 8080;启动后访问:
http://localhost:5173/
即可进入 WebUI。项目首次打开会调用 /api/env/check 进行环境检测。
如果需要让 API 服务器直接提供前端静态资源,可以先构建:
cd webui
npm install
npm run build
构建产物输出到 api/webui/,随后只需要启动:
uv run uvicorn api.main:app --port 8080 --reload
此时访问:
http://localhost:8080
即可使用。
MediaCrawler的案例应用
案例一:小红书关键词搜索采集
MediaCrawler README 直接给出了小红书关键词搜索场景。完成登录和配置后,通过:
uv run main.py --platform xhs --lt qrcode --type search
从配置文件读取关键词并搜索相关帖子,同时根据评论功能配置决定是否获取评论。项目功能表明确显示,小红书支持关键词搜索、指定帖子 ID、二级评论、指定创作者主页、登录态缓存、IP 代理池和评论词云等能力。
案例二:指定小红书帖子 ID 采集详情
当目标不是关键词搜索,而是已经拥有指定帖子 ID 时,可以使用:
uv run main.py --platform xhs --lt qrcode --type detail
项目说明该命令从配置文件中读取指定帖子 ID 列表,并获取指定帖子的信息以及评论信息。该模式与关键词搜索模式形成对应,可用于围绕明确目标对象执行详情采集。
案例三:跨平台执行同类采集任务
项目架构文档给出了 7 个平台及其主要功能:小红书支持笔记搜索、详情、创作者;抖音支持视频搜索、详情、创作者;快手支持视频搜索、详情、创作者;B 站支持视频搜索、详情、UP 主;微博支持微博搜索、详情、博主;百度贴吧支持帖子搜索、详情;知乎支持问答搜索、详情、答主。
因此,可以按照统一的命令入口,通过不同的 --platform 参数选择对应平台。例如项目 README 展示的小红书为:
uv run main.py --platform xhs --lt qrcode --type search
而具体平台支持的运行参数可以使用:
uv run main.py --help
进行查看。
案例四:SQLite 本地存储采集结果
项目文档将 SQLite 列为轻量级数据库存储方式,并推荐个人用户使用。通过下面的命令可以在采集过程中直接选择 SQLite:
uv run main.py --platform xhs --lt qrcode --type search --save_data_option sqlite
项目的数据存储体系同时支持 CSV、JSON、JSONL、Excel、SQLite 和 MySQL,因此同一个采集流程可以根据 save_data_option 选择不同的数据保存方式。
案例五:Excel 格式导出分析
配置:
SAVE_DATA_OPTION = "excel"
之后执行:
uv run main.py --platform xhs --lt qrcode --type search
或者直接:
uv run main.py --platform bili --lt qrcode --type search --save_data_option excel
项目 Excel 导出指南同时给出了小红书、抖音和 B 站三个示例,并说明结果保存在 data/{platform}/ 目录中。
案例六:使用 WebUI 完成可视化采集
启动后端:
uv run uvicorn api.main:app --port 8080 --reload
再启动前端:
cd webui
npm install
npm run dev
访问:
http://localhost:5173/
进入 WebUI 后,可以可视化配置平台、登录方式和爬取类型,实时查看爬虫运行状态及日志,同时进行数据预览和导出。
需要注意的是,项目仓库明确声明该项目内容仅供学习和研究,禁止用于商业用途、非法用途以及对其他平台进行大规模爬虫或侵犯他人合法权益的行为。