Why MediaCrawler
大家好!又是我==,本人最近忙得要死,没有精力去撰写 AUTOGEN 的 blog 了,虽然我也很想哈:),奈何时间实在不允许,有空大伙自己学学吧。今天要介绍的是 MediaCrawler 项目!
背景
最近啊,我忙啥呢?只能说我在和 Prof. He 合作做一个学术项目,需要从小红书上获取大量公开数据。但你知道的,小红书的防爬机制那叫一个严!
传统的爬虫方法,比如 requests
、scrapy
、selenium
等,根本吃不开。复杂的动态加载、加密参数让我摸爬滚打好一阵子。最终还有万能验证码劝退,简直是造孽。
最后,我选择了 MediaCrawler Pro 版本,成功解决了数据抓取的技术难题,并支持 MySQL 数据存储、多账号代理,非常好用!不过 Pro 版本价格不菲,学习成本高,并且需要本地部署后进一步修改。
所以本文的分享仅限于开源版本的mediacrawler 普通版本!
本文将分享如何部署这个神器,并介绍如何通过延迟优化让爬虫更加稳健,不被反爬秒封!✨
部署 MediaCrawler 的完整流程
1. 准备 Python 环境
首先,确保安装以下环境:
- Python 版本 >= 3.9
- Node.js 版本 >= 16(部分功能需要)
然后,克隆项目并进入项目目录:
1 | # 克隆项目代码 |
创建并激活虚拟环境:
1 | # 创建虚拟环境 |
2. 安装依赖
安装项目所需的依赖:
1 | pip install -r requirements.txt |
3. 安装 Playwright 浏览器驱动
安装 Playwright 驱动:
1 | playwright install |
4. 启动爬虫
以下是几个常见的操作示例:
关键词搜索:
1
python main.py --platform xhs --lt qrcode --type search
指定帖子抓取:
1
python main.py --platform xhs --lt qrcode --type detail
获取帮助:
1
python main.py --help
5. 数据存储选项
根据需求选择存储方式:
MySQL:推荐将数据存入 MySQL 数据库。
1
python db.py # 初始化数据库表结构
CSV/JSON:测试环境可直接保存到本地文件,路径为
data/
文件夹。
基础配置说明
以下是一些基础的配置代码示例:
1 | # 基础配置 |
以上配置提供了灵活性,可以根据项目需求进行调整。
如何优化延迟,避免账号封禁
爬虫最怕啥?就是被封号!为了减少被目标网站发现的风险,我针对源码增加了随机延迟,效果显著。
文件路径
E:\MediaCrawler-main\media_platform\xhs\core.py
修改内容
1. 在 get_note_detail_async_task
方法中加入延迟
找到以下代码段:
1 | if not note_detail_from_html: |
在该段代码之后,插入以下延迟代码:
1 | # 添加随机延迟,模拟用户行为 |
修改后代码如下:
1 | if not note_detail_from_html: |
2. 在 get_comments
方法中加入延迟
找到以下代码段:
1 | await self.xhs_client.get_note_all_comments( |
在代码执行前,加入延迟:
1 | # 添加随机延迟,防止评论请求过于频繁 |
修改后代码如下:
1 | # 添加随机延迟,防止评论请求过于频繁 |
3. 在 fetch_creator_notes_detail
方法中加入延迟
找到以下代码段:
1 | note_details = await asyncio.gather(*task_list) |
在代码之前加入延迟:
1 | # 为每个任务列表添加延迟,避免触发反爬机制 |
修改后代码如下:
1 | # 为每个任务列表添加延迟,避免触发反爬机制 |
声明
⚠️ 声明:
本代码及其优化仅供学习和研究目的使用。使用者需严格遵守以下原则:
- 不得用于商业用途。
- 合理控制请求频率,避免对目标平台造成运营干扰。
- 遵守目标平台的使用条款和 robots.txt 规则。
通过以上部署和优化,你的爬虫将更加稳定并降低被封禁的风险。希望这些经验对你有所帮助!🤗