当前位置: 首页 > news >正文

MediaCrawler爬虫框架实战手册:5步跑通小红书、抖音、B站、快手、微博的数据采集

MediaCrawler爬虫框架实战手册:5步跑通小红书、抖音、B站、快手、微博的数据采集

【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new

做内容运营的林姐,凌晨一点还在对着浏览器一页页翻评论,复制、粘贴、整理进Excel——这是她本周第三次为了一份竞品调研加班到深夜。如果你也曾为"采集社交媒体数据"这件事熬过夜,那这篇关于MediaCrawler爬虫框架的文章,就是为你准备的。

MediaCrawler 是一套开源的社交媒体数据采集工具,用 Python 写成,覆盖小红书、抖音、快手、B站、微博五大平台,能抓取视频、图片、评论、点赞、转发等数据。它最大的价值不是"能爬",而是让一个非逆向高手也能在几小时内完成从配置到出数据的完整流程。

一、先讲清楚它凭什么"好上手":不撬锁,而是带钥匙进门

市面上的爬虫大多走"逆向"路线——把平台前端的加密 JS 抠出来,在本地复现一遍。这条路又累又脆:平台一改版,加密算法一换,代码就废了。

MediaCrawler 换了个思路。它基于 Playwright 搭桥,先让你像正常用户一样扫码登录,把登录成功后的浏览器上下文保存下来;之后的每一次请求,都借这个"已登录的身份"去执行 JS 表达式、拿到加密参数。

打个比方:别人在撬锁,它只是礼貌地敲门——钥匙是你自己手机扫出来的,门是平台自己开的。这就是它代码里libs/stealth.min.js(去除浏览器自动化特征)和SAVE_LOGIN_STATE(保存登录状态)存在的意义。把最难的逆向环节绕开,难度自然降了一个量级。

二、这套爬虫框架最值钱的,其实是这两件事

1. 一套代码,五个平台

打开media_platform/目录你会发现,五个平台的实现结构几乎一样:client.py管 API 请求、core.py管爬取逻辑、login.py管登录、field.py管字段定义。它们全部继承自base/base_crawler.py里的抽象基类,再通过main.py里的工厂类按平台名一键实例化。

这意味着什么?你只需要改一个命令行参数,就能在五个平台之间无缝切换。学透一个平台,等于会了五个。

2. 内置代理IP池,专治"爬着爬着就封号"

大批量采集最怕两件事:IP 被封、账号被风控。MediaCrawler 的proxy/目录就是为这个问题设计的。它内置了从代理服务商拉取 IP、存入 Redis、维护 IP 池、按需取用的一整条链路:

MediaCrawler爬虫框架的代理IP池管理流程图

代理IP池的完整工作链路:启动时判断是否开启代理,拉取、缓存、池化、分发,每一步都有据可查。

具体到配置,代理密钥通过环境变量管理,不会硬编码进代码里——你在proxy/proxy_ip_provider.py里看到的就是这样:

代理密钥用os.getenv读取,既安全又方便换服务商。

而 IP 的提取、数量、时长、协议类型,都可以在代理服务商的后台按需生成,再填进配置:

在服务商后台生成带密钥的 API 链接,拿到的 IP 会自动进入 MediaCrawler 的代理池。

如果你只是小规模采集,把ENABLE_IP_PROXY保持为False也能正常跑;一旦要批量上量,再打开它。

三、实战演练:从零开始抓一轮"露营"相关的小红书笔记

空谈不如动手,我们完整走一遍流程。

第1步:准备环境(约5分钟)

git clone https://gitcode.com/GitHub_Trending/me/MediaCrawler-new cd MediaCrawler-new python -m venv venv source venv/bin/activate # Windows 下用 venv\Scripts\activate pip3 install -r requirements.txt playwright install

小提示:如果你计划爬抖音,记得先装 Node.js(v16.8.0 左右),抖音的签名计算依赖它。具体见docs/常见问题.md

第2步:改两行配置

打开config/base_config.py,这是整个爬虫框架的"总控台":

PLATFORM = "xhs" # xhs | dy | ks | bili | wb KEYWORDS = "露营" # 关键词,多个用英文逗号分隔 LOGIN_TYPE = "qrcode" # qrcode | phone | cookie SAVE_DATA_OPTION = "json" # csv | db | json

CRAWLER_MAX_NOTES_COUNT = 20控制这次一共抓多少条,MAX_CONCURRENCY_NUM = 4控制并发数,先保持默认即可。

第3步:扫码登录,一行命令开跑

python main.py --platform xhs --lt qrcode --type search

浏览器会自动弹出,用小红书 App 扫码登录。登录态会被缓存到browser_data/目录,下次启动直接复用,不用再扫。

第4步:数据落地

程序跑完后,data/目录下会生成按平台命名的 JSON/CSV 文件。如果想把数据入库,把SAVE_DATA_OPTION改成db,再到config/db_config.py填好 MySQL 或 PostgreSQL 连接信息即可,项目自带 ORM,建表不用你操心。

到这里,第一批数据已经到手了。整个过程你只写了两行配置、跑了一条命令。

四、进阶:几个多数人不知道的隐藏细节

  • 评论区也能抓:默认不抓评论,把ENABLE_GET_COMMENTS改成True,笔记连同评论一起落地。做舆情分析的这一步基本是必开项。
  • 指定内容爬取:不想用关键词,直接把笔记/视频 ID 填进各平台的*_SPECIFIED_ID_LIST,再用--type detail跑,就能精确抓某几条内容。B 站还单独支持video_download模式,可以真正把视频文件下载下来。
  • 无头模式省资源HEADLESS = True时不弹浏览器窗口,适合挂服务器跑;遇到小红书滑块验证过不去时,把它改成False手动过一下验证码再关。
  • 创作者主页采集:小红书支持填XHS_CREATOR_ID_LIST指定博主,用--type creator抓某个账号的全部笔记,这是调研竞品账号的利器。
  • 抖音的滑块验证tools/slider_util.py里模拟了人类拖动滑块的轨迹曲线(easing.py),这条曲线是模拟人手的"加速-减速-回弹"节奏写的,不是简单直线,细节拉满。

五、避坑问答:踩过的坑,替你提前填平

Q:跑了一会儿突然没数据了,是代码坏了吗?A:大概率是账号触发了平台风控。别头铁,降低并发、放慢节奏、开代理池,且务必控制总量,别把平台惹毛了。

Q:想换一个登录账号怎么办?A:删掉项目根目录下的browser_data/文件夹再重跑即可。

Q:报错Timeout 30000ms exceededA:先检查网络环境——这类超时八成是没开代理、网络不通畅导致的,跟代码关系不大。

Q:execjs报语法错误?A:抖音场景专属问题,装好 Node.js 就解决。

更多历史问题和排查思路,见docs/常见问题.md;想深入理解模块划分,可以翻docs/项目代码结构.md;手机号短信登录的完整配置(含短信转发器 + 内网穿透)在docs/手机号登录说明.md

六、写在最后

MediaCrawler 不复杂:一个配置文件、一条命令,五个平台的数据就能源源不断落到你手里。它把逆向的门槛砍掉,把代理池、登录缓存、滑块验证这些脏活累活都封装好了,剩下的就是你去想清楚——拿到数据之后,要解决什么问题。

如果你想交流踩坑经验、第一时间获取平台更新应对方案,欢迎扫码进群,群里都是真在用的人:

最后必须提醒一句:数据采集有边界。请仅将本项目用于学习与研究,遵守相关法律法规和各平台的服务条款,尊重内容创作者与用户的隐私。工具本身没有立场,怎么用,取决于你。

下一步行动:克隆项目 → 装依赖 → 改关键词 → 跑通第一条数据。然后,去 star 一下这个仓库,让更多需要它的人能找到它。

【免费下载链接】MediaCrawler-new项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4043088.html

相关文章:

  • 转换视频一定要几小时?m4s-converter 用 5 秒证明:你可能一直在做多余的事
  • PyCharm虚拟环境与包管理全攻略:从pip安装到项目依赖管理
  • IntelliJ IDEA 2018.3 本地授权服务器部署与激活原理深度解析
  • GEO搜索优化科普:正规地域流量分发与内容运营指南
  • Jane Street OCaml Workshop项目架构解析:从dune配置到模块设计最佳实践
  • RabbitMQ 全套复盘 + Nacos+ES+MyBatis-Plus 梳理
  • 下载老是断、速度上不去?3步把浏览器下载交给Motrix,多线程续传全搞定
  • 告别慢查询熬夜排查:三步用 SQLAdvisor 生成 MySQL 索引优化建议
  • 卸载 Edge 屡屡失败?EdgeRemover 用 4 套接力方案一次搞定
  • 5分钟快速上手DeepTutor:开源AI学习助手,把你的资料变成终身私教
  • 零代码搭建数据看板:Redash 快速上手,5 步做出你的第一块可视化仪表盘
  • 如何用一个周末,把家乡街道原样搬进Minecraft?Arnis真实地图生成快速上手
  • 用 Homebrew 统一管理 macOS 与 Linux 开发环境:新手到高手的 4 个阶段
  • 三分钟上手 Homebrew 包管理器:一条命令装好并更新 macOS 与 Linux 全部软件
  • WeKnora向量数据库选型与迁移实战:从pgvector到Elasticsearch的无痛切换
  • 把酷安装进 Windows:这个 UWP 客户端让我从此用电脑刷酷安
  • RAT-retrieval-augmented-thinking技术原理解析:两阶段推理如何让AI思考更清晰
  • 为什么你的Illusion游戏Mod总在打架?用KKManager把它们管起来
  • 一文搞定跨平台macOS下载:gibMacOS从官方安装包获取到系统盘制作实战指南
  • soildworks2025下载分享(只供学习交流)
  • Portrait-Segmentation核心架构解密:Slim-net如何实现1.5MB模型20FPS实时推理
  • register-service-worker未来展望:即将到来的新功能和改进路线图
  • Formality:黑盒(black box)
  • 一招解决BT下载龟速:每日自动更新的公共Tracker清单配置指南
  • Tiled地图编辑器深度解析:分层数据模型与智能地形引擎的实现之道
  • 052、联发科Imagiq HyperEngine架构适配:天玑9000/9200的ISP多核并行调度与Tuning Toolkit调优案例
  • 卸载Edge终极指南:用EdgeRemover彻底移除Microsoft Edge并防止自动重装
  • GerberTools完整指南:如何快速搞定Gerber文件处理与拼板生产
  • 如何快速上手Lets_OCR?3分钟搭建你的OCR识别系统
  • 彻底解决Visual Studio中文乱码:从编码原理到实战配置指南