skill.md 4.8 KB

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

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

{
  "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

# 爬取热搜榜
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 轮换、请求间隔、频率控制