基于Selenium的智能微博数据采集系统,支持关键词搜索、时间范围筛选和评论深度抓取。
- 关键词搜索(支持复杂搜索语法)
- 时间范围精确筛选(支持自动分时段续爬)
- 评论深度抓取(主评+子评三级关联)
- 元数据完整保存(用户信息、互动数据、时间来源)
- 动态请求间隔(0.8-2.5秒随机延迟)
- Chrome指纹模拟
- 自动恢复会话
- 智能页面元素探测
- JSON格式标准化输出
- 采集进度持久化
- 时间范围自动迭代
- 无效结果自动过滤
- 微博搜索结果最多显示50页,系统自动检测页数
- 当结果超过50页时,自动记录末尾时间点
- 基于时间点智能分段,确保完整采集长时间范围数据
- 空结果页面自动跳过,提高采集效率
- 支持评论全量获取,突破默认显示限制
- 点击"查看更多评论"自动跳转至详情页
- 动态滚动加载所有子评论内容
- 评论数据结构化保存(用户、内容、时间、点赞数)
- 支持处理点赞数为0的特殊显示情况
- 自动保存采集进度,支持意外中断后恢复
- 智能处理页面加载超时和元素定位失败
- CSS选择器和XPath双重定位策略,提高页面解析稳定性
- 详细的错误日志和HTML结构记录,便于调试和修复
core/: 核心爬虫实现weibo_spider.py: 微博爬虫主类base_spider.py: 爬虫基类
utils/: 工具函数progress.py: 进度管理filters.py: 数据过滤器
tests/: 测试脚本get_replies.py: 评论获取测试
data/: 数据存储目录configs/: 配置文件
- Python 3.8+
- Chrome 浏览器 100+
- ChromeDriver(需与Chrome版本匹配)
# 安装依赖
pip install -r requirements.txt在config/user_config.json中配置爬取参数:
{
"keywords": ["春晚", "春节联欢晚会"],
"start_date": "2019-02-04-20",
"end_date": "2019-02-05-20",
"user_data_dir": "./chrome_profile",
"headless": false,
"request_interval": [0.1, 0.5],
"page_load_timeout": 30
} # 基础运行模式
python main.py| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| keywords | list | 是 | 搜索关键词列表 |
| start_date | string | 是 | 开始时间(格式:YYYY-MM-DD-HH) |
| end_date | string | 是 | 结束时间(格式:YYYY-MM-DD-HH) |
| headless | bool | 否 | 是否使用无头模式(默认true) |
| user_data_dir | string | 否 | 浏览器用户数据目录(用于保持登录状态) |
- 首次使用建议在非无头模式下运行,完成微博登录验证
- 输出文件保存在根目录,按关键词和时间范围自动命名
- 采集进度自动保存在
data/progress/目录下
-
ChromeDriver报错
- 确认安装的ChromeDriver版本与Chrome浏览器完全匹配
- 将ChromeDriver添加到系统PATH环境变量
-
登录验证问题
- 首次运行在非无头模式下手动登录微博账号
- 登录信息会保存在
user_data目录
-
页面结构变化
- 如果出现元素定位失败,请检查
core/weibo_spider.py中的XPath选择器 - 可提交issue并提供
error_log.html文件内容
- 如果出现元素定位失败,请检查
- 完整子评论获取在某些情况下不稳定,可以考虑加大wait时间
- 微博页面结构变化时可能需要更新选择器