# Weibo Scraper Skill ## Identity - **Name**: weibo_scraper - **Version**: 1.1.0 - **Type**: Scraping/Data Extraction - **Platform**: Weibo (weibo.com) ## Description 微博热点内容爬取技能。能够从微博平台爬取热搜榜、热门微博、热点话题等内容,提取结构化数据并进行清洗分类。 ## Capabilities 1. **热搜榜爬取** - 获取微博热搜榜单 Top 50 2. **热门微博抓取** - 获取热门微博内容及作者信息 3. **分类筛选** - 按娱乐、社会、科技、搞笑、体育、财经等分类 4. **指标提取** - 提取点赞数、评论数、转发数、阅读数 5. **数据清洗** - 去广告、去无效内容、格式标准化 6. **定时爬取** - 支持 Cron 定时任务和增量更新 ## 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. 提取关键字段 2. 转换中文数字 (如 "1.2万" → 12000) 3. 标准化时间戳 4. 生成最终 JSON ### Step 5: 结果输出 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` ### Crawl Strategy 1. 使用公开 API 或网页爬取热搜数据 2. 解析 JSON 响应获取结构化数据 3. 过滤低质量内容(广告、无内容、已删除) 4. 分类标注 5. 输出标准化 JSON ### 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 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 - 请求间隔: 3-5 秒随机 - 每分钟请求数: ≤ 20 - 超时重试: 3 次 - 退避策略: 遇到 403/429 等待 30s 后重试 ### Error Handling - 403 Forbidden: 更换 User-Agent 或 Cookie - 429 Too Many Requests: 指数退避 (30s, 60s, 120s) - 网络超时: 重试,超时递增 - 反爬机制: 降低频率或切换 UA ## Output Format ```json { "source": { "platform": "weibo", "category": "娱乐", "hot_id": "xxx", "url": "https://weibo.com/xxx" }, "engagement": { "likes": 12345, "comments": 2345, "shares": 1234, "read_count": 123456 }, "content": { "title": "热搜标题", "text": "微博正文内容", "media_urls": ["https://xxx.jpg"], "category_tags": ["娱乐", "明星", "综艺"] }, "author": { "username": "用户名", "followers": 100000, "verified": true }, "timestamp": "2024-01-01T00:00:00Z", "metrics": { "hot_rank": 1, "hot_score": 999999, "trend": "up" } } ``` ## Execution Commands ```bash # 爬取热搜榜 node weibo_scraper.js --category 娱乐 --limit 20 # 爬取热门微博 node weibo_scraper.js --type hot --limit 50 # 定时增量更新 node weibo_scraper.js --cron --incremental ``` ## File Structure ``` weibo-scraper/ ├── .claude/ │ └── skills/ │ └── main_skill/ │ └── SKILL.md (本ファイル) ├── weibo_scraper.js # 主脚本 ├── requirements.txt # Python 依赖 └── workspace/ # 输出目录 ``` ## Dependencies - Node.js: 18+ - Python: 3.8+ (可选) - pip packages: requests, beautifulsoup4, lxml - npm packages: axios, cheerio ## Quality Checks - [ ] 数据完整: engagement 数据全部填充 (如无法获取则标记为 -1) - [ ] 分类准确: category_tags 正确 - [ ] 时效性: timestamp 为最近内容 - [ ] 无效过滤: 已删除/广告内容已过滤 - [ ] 反爬合规: UA 轮换、请求间隔、频率控制