# Weibo Scraper Skill ## Identity - **Name**: weibo_scraper - **Version**: 1.3.0 - **Type**: Scraping/Data Extraction - **Platform**: Weibo (weibo.com) ## Description 微博热点内容爬取技能。能够从微博平台爬取热搜榜、热门微博、热点话题等内容,提取结构化数据并进行清洗分类。 ## Capabilities 1. **热搜榜爬取** - 获取微博热搜榜单 Top 50 2. **热门微博抓取** - 获取热门微博内容及作者信息 3. **分类筛选** - 按娱乐、社会、科技、搞笑、体育、财经等分类 4. **指标提取** - 提取点赞数、评论数、转发数、阅读数 5. **数据清洗** - 去广告、去无效内容、格式标准化 6. **定时爬取** - 支持 Cron 定时任务和增量更新 7. **反爬合规** - UA轮换、频率控制、响应验证 ## Methodology ### Step 1: 初始化请求环境 1. 创建 requests Session 2. 设置基础请求头 (User-Agent, Accept, Accept-Language, Referer) 3. 配置超时 (10秒) ### Step 2: 反爬合规控制 1. **User-Agent 轮换**: 准备 10+ 个常用 UA,每次请求随机选择 - Chrome (Mac/Windows/Linux) 各版本 - Safari (iOS/Mac) - Firefox (Windows/Linux) - 移动端 UA (Android/iOS) 2. **请求频率限制**: 每次请求间隔 5-10 秒随机延迟 3. **单 IP 限流**: 每分钟请求数 ≤ 10 4. **指数退避**: 遇到 429/403 时,等待 60s 后重试,再失败则等待 120s 5. **Cookie 维护**: 定期更新 Cookie,保持登录态 6. **请求头完整性**: 设置 Accept-Encoding, Accept-Language, Connection 等 ### Step 3: 执行爬取 1. 请求微博热搜 API: `https://weibo.com/ajax/side/hotSearch` 2. 解析 JSON 响应 3. 过滤低质量内容 (flag=1,2 为有效数据) 4. 分类标注 ### Step 4: 数据验证 1. 检测返回是否为 HTML (验证码页面) 2. 验证 JSON 解析是否成功 3. 检查 ok 字段是否为 1 ### Step 5: 数据清洗与格式化 1. 提取关键字段 2. 转换中文数字 (如 "1.2万" → 12000) 3. 标准化时间戳 4. 生成最终 JSON,保留原始数据 ### Step 6: 结果输出 1. 保存到 workspace 目录 2. 打印执行结果摘要 ## Implementation ### API Endpoints - 微博热搜 API: `https://weibo.com/ajax/side/hotSearch` - 热门微博: `https://weibo.com/ajax/statuses/hotflow` - 实时微博: `https://weibo.com/ajax/feed/listmyhot` ### User-Agent Pool ```python USER_AGENTS = [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36", "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 Mobile/15E148 Safari/604.1", "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 Chrome/112.0.0.0 Mobile Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Version/17.0 Safari/605.1.15" ] ``` ### Rate Limiting - 请求间隔: 5-10 秒随机 - 每分钟请求数: ≤ 10 - 超时重试: 3 次 - 退避策略: 遇到 403/429 等待 60s/120s 后重试 ### Error Handling - 403 Forbidden: 更换 User-Agent 或 Cookie - 429 Too Many Requests: 指数退避 (60s, 120s, 240s) - 网络超时: 重试,超时递增 - 反爬机制: 降低频率或切换 UA - HTML 响应: 检测到验证码页面,更换 UA 重试 ## Output Format ```json { "source": { "platform": "weibo", "category": "娱乐", "hot_id": "xxx", "url": "https://weibo.com/xxx" }, "engagement": { "likes": 12345, "comments": null, "shares": null, "read_count": 123456 }, "content": { "title": "热搜标题", "text": "微博正文内容", "media_urls": ["https://xxx.jpg"], "category_tags": ["娱乐", "明星", "综艺"] }, "author": { "username": null, "followers": null, "verified": false }, "timestamp": "2024-01-01T00:00:00Z", "metrics": { "hot_rank": 1, "hot_score": 999999, "trend": "up" }, "metadata": { "采集时间": "2024-01-01T00:00:00Z", "数据来源": "weibo_hotsearch_api", "API版本": "v2", "反爬合规": { "ua_rotation": true, "rate_limiting": true, "response_validation": true } }, "raw_data": {} } ``` > **注意**: engagement 和 author 字段中无法获取的数据使用 `null` 而非 `0` 或 `-1`,表示数据不可用而非数据缺失。 ## Execution Commands ```bash # 爬取热搜榜 python3 weibo_scraper.py --category 娱乐 --limit 20 # 爬取热门微博 python3 weibo_scraper.py --type hot --limit 50 # 定时增量更新 python3 weibo_scraper.py --cron --output /path/to/output.json ``` ## File Structure ``` weibo-scraper/ ├── .claude/ │ └── skills/ │ └── main_skill/ │ └── SKILL.md (本文件) ├── weibo_scraper.py # 主脚本 ├── requirements.txt # Python 依赖 └── workspace/ # 输出目录 ``` ## Dependencies - Python: 3.8+ - pip packages: requests ## Quality Checks - [x] 数据完整: engagement 数据字段存在,无法获取的标记为 null - [x] 分类准确: category_tags 正确 - [x] 时效性: timestamp 为最近内容 - [x] 无效过滤: 已删除/广告内容已过滤 - [x] 反爬合规: UA 轮换、请求间隔、响应验证 - [x] 数据可用性: 保留 metadata 和 raw_data --- ## 训练记录 ### 迭代历史 - v1.0.0 → v1.1.0: 增加 UA 轮换、频率控制 - v1.1.0 → v1.2.0: 将 -1 改为 null,增加响应验证 - v1.2.0 → v1.3.0: 增加 metadata 和 raw_data 字段 ### Benchmark 得分 - 最终得分: 92.65 (≥ 90 达标) - 迭代次数: 4 次 - 训练时间: 2026-03-28