ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MediaCrawler 多平台自媒体爬虫:环境搭建、CDP 模式、命令行参数与数据存储全解析

MediaCrawler 多平台自媒体爬虫:环境搭建、CDP 模式、命令行参数与数据存储全解析 MediaCrawler 多平台自媒体爬虫环境搭建、CDP 模式、命令行参数与数据存储全解析【免费下载链接】MediaCrawler小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 评论爬虫、微博帖子 评论爬虫、百度贴吧帖子 百度贴吧评论回复爬虫 | 知乎问答文章评论爬虫项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler本文基于 MediaCrawler 仓库的 README.md 及其配套文档与源码系统讲解这个多平台自媒体数据采集工具的技术原理、完整安装流程、CDP 浏览器模式配置、全部命令行参数、核心配置项与各平台数据存储方案。读完本文你可以独立完成从环境准备、登录态管理、参数化启动爬虫到数据落库/导出 Excel 的全流程操作并理解每一步背后对应的源码实现。一、项目定位与技术原理MediaCrawler 是一个功能强大的多平台自媒体数据采集工具支持小红书、抖音、快手、B 站、微博、贴吧、知乎等主流平台的公开信息抓取。根据 README.md 与 docs/项目架构文档.md 的说明其核心设计有三点核心技术基于 Playwright 浏览器自动化框架登录并保存登录态无需 JS 逆向利用保留登录态的浏览器上下文环境通过执行 JS 表达式的方式直接获取接口签名参数从而避免逆向各平台复杂的加密算法大幅降低技术门槛反检测能力默认的 CDP 模式复用用户真实 Chrome/Edge 浏览器环境Cookie、扩展、浏览历史降低被平台风控检测的风险并内置 IP 代理池机制。功能特性矩阵README 中给出的各平台能力支持情况如下全部平台均支持关键词搜索、指定帖子 ID 爬取、二级评论、指定创作者主页、登录态缓存、IP 代理池与评论词云图平台关键词搜索指定帖子ID爬取二级评论指定创作者主页登录态缓存IP代理池生成评论词云图小红书✅✅✅✅✅✅✅抖音✅✅✅✅✅✅✅快手✅✅✅✅✅✅✅B 站✅✅✅✅✅✅✅微博✅✅✅✅✅✅✅贴吧✅✅✅✅✅✅✅知乎✅✅✅✅✅✅✅平台与命令行代号的对应关系定义在 cmd_arg/arg.py 的PlatformEnum中xhs小红书、dy抖音、ks快手、biliB 站、wb微博、tieba百度贴吧、zhihu知乎。二、运行链路从 main.py 到平台爬虫理解 README 中运行爬虫程序命令背后的执行链路有助于排查问题。整个流程集中在 main.py参数解析main()调用 cmd_arg/arg.py 中的parse_cmd()使用 Typer 构建 CLI解析后的命令行参数会直接覆盖config模块中的同名全局配置见 cmd_arg/arg.py 的 override global config 段落因此命令行参数优先级高于配置文件数据库初始化若携带--init_db参数则初始化对应数据库表结构后直接退出若SAVE_DATA_OPTION为sqlite/mysql/db/postgres则自动建表以避免首次运行出现no such table错误main.py工厂创建爬虫CrawlerFactory.create_crawler()依据平台代号从注册表中取出对应爬虫类main.py如xhs - XiaoHongShuCrawler、dy - DouYinCrawler等执行爬取调用crawler.start()爬取结束后若为 Excel 存储则统一 flush 落盘若开启词云且存储格式为json/jsonl则基于评论生成词云图main.py。每个平台爬虫都继承自 base/base_crawler.py 中的AbstractCrawler抽象基类必须实现start()、search()与标准 Playwright 模式的launch_browser()基类还提供了一个可选的launch_browser_with_cdp()钩子其默认实现回退到标准模式——各平台在需要时覆写该方法以接入 CDP 浏览器管理。目录结构速览结合 docs/项目架构文档.md 与仓库实际目录核心模块职责如下目录职责config/全局配置base_config.py与各平台专属配置如 config/xhs_config.pymedia_platform/七个平台的爬虫实现每个平台包含client.pyAPI 客户端、core.py爬取逻辑、login.py登录、field.py字段枚举store/各平台数据落盘实现另有 store/excel_store_base.py 提供 Excel 存储基类database/ORM 模型、数据库会话与 MongoDB 存储基类proxy/IP 代理池管理proxy_ip_pool.py与代理刷新混入proxy_mixin.pytools/CDP 浏览器管理cdp_browser.py、浏览器启动browser_launcher.py、异步文件写入async_file_writer.py等webui/基于 React Vite 的可视化操作界面前端配合 api/ 后端libs/JS 脚本库含反检测脚本stealth.min.js及各平台签名脚本三、前置依赖与环境安装3.1 安装 uv推荐方式README 推荐以uv管理 Python 环境。安装后执行uv --version验证。推荐理由是 uv 速度快、依赖解析准确可通过uv sync保证 Python 版本与依赖包的一致性。项目对 Python 版本的实际要求可从 pyproject.toml 确认requires-python 3.11且 pyproject.toml 中已配置 uv 默认使用清华镜像源加速安装。3.2 安装 Node.js项目依赖 Node.js抖音、知乎等平台需要执行 JS 签名脚本如 libs/douyin.js、libs/zhihu.jsREADME 要求版本 16.0.0。3.3 安装 Python 依赖# 进入项目目录 cd MediaCrawler # 使用 uv sync 命令来保证 python 版本和相关依赖包的一致性 uv sync3.4 安装浏览器驱动仅标准 Playwright 模式需要如果使用默认的 CDP 模式连接已有 Chrome 浏览器无需安装浏览器驱动。仅在使用标准 Playwright 模式时需要# 仅在标准 Playwright 模式下需要安装浏览器驱动 uv run playwright install3.5 Chrome 浏览器配置CDP 模式推荐项目默认使用 CDP 模式连接用户已有的 Chrome 浏览器可以复用浏览器已有的登录状态、Cookie、扩展等大幅降低平台风控检测风险。使用前需要安装最新版 Chrome 浏览器版本 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 模式。四、CDP 模式两种使用方式与完整配置项CDPChrome DevTools Protocol模式是 MediaCrawler 的核心反检测手段详细指南见 docs/CDP模式使用指南.md。其优势在于使用用户真实安装的浏览器含扩展与个人设置、浏览器指纹更真实、自动继承登录状态/Cookie/浏览历史、可利用用户安装的代理扩展等行为模式更接近真实用户。CDP 模式支持两种使用方式模式说明适用场景连接已有浏览器默认推荐连接用户正在使用的 Chrome 浏览器复用真实的 Cookie、扩展和浏览历史反检测要求高需要最大程度降低风控风险启动新浏览器自动检测并启动一个新的 Chrome/Edge 浏览器实例不需要复用浏览器状态的场景方式一连接已有浏览器即上文 3.5 节的流程配置为ENABLE_CDP_MODE TrueCDP_CONNECT_EXISTING True调试端口需与chrome://inspect页面显示的一致默认 9222方式二启动新浏览器将CDP_CONNECT_EXISTING置为False程序自动检测并启动新的 Chrome/Edge 实例。对应配置项及其默认值均可在 config/base_config.py 中查看配置项类型默认值说明ENABLE_CDP_MODEboolTrue是否启用 CDP 模式CDP_CONNECT_EXISTINGboolTrue是否连接已有浏览器推荐开启CDP_DEBUG_PORTint9222CDP 调试端口CDP_HEADLESSboolFalseCDP 模式下的无头模式注意部分反检测功能在无头模式下可能失效AUTO_CLOSE_BROWSERboolTrue程序结束时是否关闭浏览器置 False 可保留浏览器便于调试CUSTOM_BROWSER_PATHstr自定义浏览器路径为空时自动检测 Chrome/Edge 安装位置仅启动新浏览器模式有效BROWSER_LAUNCH_TIMEOUTint60浏览器启动/连接超时时间秒支持的浏览器包括 Windows/macOS 上的 Google Chrome 与 Microsoft Edge稳定版、Beta、Dev、Canary以及 Linux 上的 Chrome/Chromium、Edge。CDP 浏览器管理的实现位于 tools/cdp_browser.py浏览器路径检测逻辑位于 tools/browser_launcher.py。五、命令行参数完整参考所有命令行参数在 cmd_arg/arg.py 中通过 Typer 定义默认值均取自config全局配置解析后覆盖回config模块。完整参数如下参数说明默认值来源--platform平台选择xhs/dy/ks/bili/wb/tieba/zhihuconfig.PLATFORM--lt登录方式qrcode扫码/phone手机号/cookieconfig.LOGIN_TYPE--type爬取类型search关键词搜索/detail帖子详情/creator创作者主页config.CRAWLER_TYPE--start起始页码config.START_PAGE默认 1--keywords搜索关键词多个用英文逗号分隔config.KEYWORDS--get_comment是否爬取一级评论支持yes/true/t/y/1或no/false/f/n/0config.ENABLE_GET_COMMENTS--get_sub_comment是否爬取二级评论取值同上config.ENABLE_GET_SUB_COMMENTS--headless是否无头模式同时作用于 Playwright 与 CDP取值同上config.HEADLESS--save_data_option存储方式csv/db/json/jsonl/sqlite/mongodb/excel/postgresconfig.SAVE_DATA_OPTION--init_db初始化数据库表结构sqlite/mysql/postgres单独使用时默认为sqlitecmd_arg/arg.py无--cookiesCookie 登录方式所用的 Cookie 值config.COOKIES--specified_iddetail 模式的帖子/视频 ID 列表逗号分隔支持完整 URL 或纯 ID空--creator_idcreator 模式的创作者 ID 列表逗号分隔支持完整 URL 或纯 ID空--max_comments_count_singlenotes单条帖子/视频最多爬取的一级评论数config.CRAWLER_MAX_COMMENTS_COUNT_SINGLENOTES默认 10--crawler_max_notes_count最多爬取的视频/帖子数config.CRAWLER_MAX_NOTES_COUNT默认 15--max_concurrency_num最大并发爬虫数config.MAX_CONCURRENCY_NUM默认 1--save_data_path数据保存路径为空则保存到data目录config.SAVE_DATA_PATH--enable_ip_proxy是否启用 IP 代理取值同布尔参数config.ENABLE_IP_PROXY--ip_proxy_pool_countIP 代理池数量config.IP_PROXY_POOL_COUNT默认 2--ip_proxy_provider_name代理服务商kuaidaili/wandouhttp/staticconfig.IP_PROXY_PROVIDER_NAME--static_proxy_url静态代理 URL例如http://user:passwordhost:portconfig.STATIC_PROXY_URL几个值得注意的实现细节--specified_id的平台映射解析后按平台写入对应的配置列表如xhs - XHS_SPECIFIED_NOTE_URL_LIST、dy - DY_SPECIFIED_ID_LIST、bili - BILI_SPECIFIED_ID_LIST等cmd_arg/arg.py贴吧 ID 归一化贴吧平台支持直接传/p/数字ID形式的 URL内部会自动提取纯 ID--creator_id传纯数字时会自动拼接为https://tieba.baidu.com/home/main?idid形式cmd_arg/arg.py非法枚举值兜底若配置值不在枚举范围内会打印黄色警告并回退到默认值而不是直接崩溃cmd_arg/arg.py。运行命令示例# 在 config/base_config.py 查看配置项目功能写的有中文注释 # 从配置文件中读取关键词搜索相关的帖子并爬取帖子信息与评论 uv run main.py --platform xhs --lt qrcode --type search # 从配置文件中读取指定的帖子ID列表获取指定帖子的信息与评论信息 uv run main.py --platform xhs --lt qrcode --type detail # 打开对应APP扫二维码登录 # 其他平台爬虫使用示例执行下面的命令查看 uv run main.py --help六、核心配置文件 base_config.py 详解config/base_config.py 是全局配置的主体按功能分组讲解6.1 基础配置PLATFORM xhs # 平台: xhs | dy | ks | bili | wb | tieba | zhihu XHS_INTERNATIONAL False # 是否使用海外版小红书 (rednote.com)开启后 API 走 webapi.rednote.com KEYWORDS 编程副业,编程兼职 # 关键词搜索配置英文逗号分隔 LOGIN_TYPE qrcode # qrcode | phone | cookie COOKIES CRAWLER_TYPE search # search (关键词搜索) | detail (帖子详情) | creator (创作者主页)6.2 浏览器与登录态HEADLESS False # True 为无头模式小红书扫码失败或抖音需手机验证时建议开浏览器手动过验证 SAVE_LOGIN_STATE True # 是否保存登录状态登录态缓存的关键开关 USER_DATA_DIR %s_user_data_dir # 浏览器文件缓存目录%s 会被平台名替换6.3 IP 代理池ENABLE_IP_PROXY False # 是否启用 IP 代理 IP_PROXY_POOL_COUNT 2 # 代理 IP 池数量 IP_PROXY_PROVIDER_NAME kuaidaili # kuaidaili | wandouhttp | static STATIC_PROXY_URL # 静态代理地址provider 为 static 时生效代理池的实现位于 proxy/proxy_ip_pool.py各服务商客户端在 proxy/providers/。当使用企业代理、Burp Suite、mitmproxy 等会注入自签名证书的中间人代理时可将DISABLE_SSL_VERIFY设为True注意其带来的中间人攻击风险见 config/base_config.py 的注释。6.4 数据保存与抓取控制SAVE_DATA_OPTION jsonl # csv | db | json | jsonl | sqlite | excel | postgres SAVE_DATA_PATH # 保存路径为空则保存到 data 目录 START_PAGE 1 # 起始页码 CRAWLER_MAX_NOTES_COUNT 15 # 控制爬取的视频/帖子数量 MAX_CONCURRENCY_NUM 1 # 并发爬虫数量 ENABLE_GET_MEIDAS False # 是否爬取媒体资源图片/视频默认关闭 ENABLE_GET_COMMENTS True # 是否爬取评论README 提示原生 venv 方式下需手动开启 CRAWLER_MAX_COMMENTS_COUNT_SINGLENOTES 10 # 单帖一级评论上限 ENABLE_GET_SUB_COMMENTS False # 是否爬取二级评论默认关闭 CRAWLER_MAX_SLEEP_SEC 2 # 爬取间隔秒注意README 在原生 venv 方式章节特别提醒——项目默认没有开启评论爬取模式该说法对应旧版本行为如需评论请在 config/base_config.py 中确认ENABLE_GET_COMMENTS为True。6.5 评论词云ENABLE_GET_WORDCLOUD False # 是否生成评论词云 CUSTOM_WORDS { 零几: 年份, # 自定义词组: 词:所属分组 高频词: 专业术语, } STOP_WORDS_FILE ./docs/hit_stopwords.txt # 停用词文件 FONT_PATH ./docs/STZHONGS.TTF # 中文字体文件从 main.py 的实现可以看到词云生成仅在使用json/jsonl存储且开启ENABLE_GET_WORDCLOUD时于爬取完成后执行。6.6 平台专属配置base_config.py末尾通过from .xxx_config import *引入各平台配置config/base_config.py。以小红书为例config/xhs_config.py 包含三项SORT_TYPE搜索结果排序方式枚举值定义在 media_platform/xhs/field.pyXHS_SPECIFIED_NOTE_URL_LISTdetail 模式下指定的笔记 URL 列表必须携带xsec_token参数XHS_CREATOR_ID_LISTcreator 模式下指定的创作者主页 URL 列表需携带xsec_token与xsec_source参数。七、数据存储方案MediaCrawler 支持 CSV、JSON、JSONL、Excel、SQLite、MySQL、PostgreSQL、MongoDB 等多种存储方式详细指南见 docs/data_storage_guide.md。各方案的适用建议存储方式特点使用命令CSV/JSON/JSONL 文件保存到data/目录JSONL 为默认格式每行一个 JSON 对象追加写入性能好--save_data_option csv / json / jsonlExcel 文件多工作表内容、评论、创作者、标题样式/自动列宽/边框等格式化--save_data_option excelSQLite轻量级、无需服务器适合个人使用推荐先--init_db sqlite再--save_data_option sqliteMySQL关系型数据库需提前创建数据库db参数为兼容历史保留先--init_db mysql再--save_data_option dbPostgreSQL高级关系型数据库推荐生产环境使用先--init_db postgres再--save_data_option postgresMongoDBNoSQL 文档存储--save_data_option mongodb命令示例继承自 docs/data_storage_guide.md# 使用 Excel 存储数据推荐用于数据分析 uv run main.py --platform xhs --lt qrcode --type search --save_data_option excel # 初始化 SQLite 数据库并使用 SQLite 存储数据 uv run main.py --init_db sqlite uv run main.py --platform xhs --lt qrcode --type search --save_data_option sqlite # 初始化 MySQL 数据库db 参数为适配历史更新而沿用 uv run main.py --init_db mysql uv run main.py --platform xhs --lt qrcode --type search --save_data_option db # 初始化 PostgreSQL 数据库并存储 uv run main.py --init_db postgres uv run main.py --platform xhs --lt qrcode --type search --save_data_option postgres # 使用 CSV / JSON / JSONL 存储数据 uv run main.py --platform xhs --lt qrcode --type search --save_data_option csv uv run main.py --platform xhs --lt qrcode --type search --save_data_option json uv run main.py --platform xhs --lt qrcode --type search --save_data_option jsonl源码层面的佐证--init_db使用时无需携带其他可选参数解析后会在 main.py 中完成建表即退出而数据库类存储sqlite/mysql/db/postgres在每次运行时会自动建表main.pyExcel 数据则在程序退出前由_flush_excel_if_needed()统一 flush 落盘main.py其格式化实现位于 store/excel_store_base.pyExcel 导出细节另见 docs/excel_export_guide.md。八、WebUI 可视化操作界面MediaCrawler 提供了基于 Web 的可视化操作界面前端位于 webui/后端 API 位于 api/无需命令行也能配置和运行爬虫。开发调试推荐开发时需要同时启动后端 API 服务和前端 Vite 开发服务器# 终端 1启动 API 服务器默认端口 8080 uv run uvicorn api.main:app --port 8080 --reload # 终端 2启动前端开发服务器 cd webui npm install npm run dev # 默认在 5173 端口启动并代理 /api 到 8080启动成功后访问http://localhost:5173/即可打开 WebUI 界面。首次打开会进行环境检测调用/api/env/check请确保后端服务已启动如果检测失败可点击「跳过检测」临时跳过。构建生产资源如果希望通过 API 服务器直接提供 WebUI 静态资源需要先构建前端cd webui npm install npm run build # 产物输出到 api/webui/构建完成后只需启动 API 服务器uv run uvicorn api.main:app --port 8080 --reload然后访问http://localhost:8080即可。WebUI 的功能特性包括可视化配置爬虫参数平台、登录方式、爬取类型等、实时查看爬虫运行状态和日志基于 WebSocket见 api/routers/websocket.py、数据预览和导出前端组件位于 webui/src/components/data/。九、使用 Python 原生 venv 管理环境备选方案如果不使用 uv也可以走原生 venv 流程README 标注为不推荐因为requirements.txt基于 Python 3.11 编写其他版本可能存在依赖兼容性问题# 进入项目根目录 cd MediaCrawler # 创建虚拟环境 python -m venv venv # macOS Linux 激活虚拟环境 source venv/bin/activate # Windows 激活虚拟环境 venv\Scripts\activate# 安装依赖库 pip install -r requirements.txt # 安装 playwright 浏览器驱动 playwright install# 项目默认是没有开启评论爬取模式如需评论请在 config/base_config.py 中的 ENABLE_GET_COMMENTS 变量修改 # 一些其他支持项也可以在 config/base_config.py 查看功能写的有中文注释 # 从配置文件中读取关键词搜索相关的帖子并爬取帖子信息与评论 python main.py --platform xhs --lt qrcode --type search # 从配置文件中读取指定的帖子ID列表获取指定帖子的信息与评论信息 python main.py --platform xhs --lt qrcode --type detail # 打开对应APP扫二维码登录 # 其他平台爬虫使用示例执行下面的命令查看 python main.py --help十、合规使用声明最后需要强调 README 中的免责声明本项目以学习和研究为目的供技术交流使用。下载、安装和使用本项目时应严格遵守所在地相关法律法规与目标平台的使用条款本项目严禁用于任何非法目的或非学习、非研究的商业行为不得用于大规模爬取或对平台造成运营干扰使用者应自行控制请求频率并承担相应法律责任。完整的免责声明条款见 README.md 末尾及根目录 LICENSE 文件。小结MediaCrawler 的设计思路可以概括为配置驱动 工厂模式 抽象基类——config/base_config.py 定义所有行为开关命令行参数cmd_arg/arg.py可按需覆盖CrawlerFactorymain.py按平台代号路由到具体爬虫AbstractCrawlerbase/base_crawler.py统一约束各平台实现。掌握CDP 模式配置 命令行参数 存储方案这三块就掌握了 MediaCrawler 的日常使用与二次扩展能力。【免费下载链接】MediaCrawler小红书笔记 | 评论爬虫、抖音视频 | 评论爬虫、快手视频 | 评论爬虫、B 站视频 评论爬虫、微博帖子 评论爬虫、百度贴吧帖子 百度贴吧评论回复爬虫 | 知乎问答文章评论爬虫项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表