技术实战:Python 一键爬取 ClawHub 所有 Skills 技能数据

9次阅读
没有评论

AI 智能体开发领域,ClawHub 是一个汇集了海量实用技能(Skills)的平台,涵盖工具调用、数据处理、自动化操作等各类优质能力。为了方便大家快速检索、分析这些技能资源,今天分享一篇纯 Python 实战教程,无需复杂框架,一键抓取 ClawHub 全站 Skills 数据,并保存为结构化 CSV 文件。

一、核心思路

  1. 分析接口:ClawHub 采用分页接口加载 Skills 数据,直接请求后端 API 比解析 HTML 更高效;
  2. 循环分页:遍历所有页码,直到无数据返回为止;
  3. 数据清洗:提取技能 ID、名称、描述、作者、分类、创建时间等核心字段;
  4. 持久化存储:将数据保存为 CSV 格式,方便后续 Excel 查看、数据分析。

二、环境准备

仅需安装 2 个基础库,执行命令安装:

bash

运行

pip install requests pandas

三、完整爬虫代码

python

运行

import requests
import pandas as pd
import time

# ===================== 配置参数 =====================
BASE_URL = "https://api.clawhub.com/skills"  # ClawHub Skills 核心接口
PAGE_SIZE = 20  # 每页数据量(接口默认值)
OUTPUT_FILE = "clawhub_all_skills.csv"  # 输出文件名
DELAY = 1  # 请求间隔(秒),避免请求过快被限制
# ====================================================

def fetch_all_clawhub_skills():
    """抓取 ClawHub 所有 Skills 数据"""
    all_skills = []
    page_num = 1
    print("🚀 开始抓取 ClawHub Skills 数据...")

    while True:
        try:
            # 构造请求参数
            params = {
                "page": page_num,
                "size": PAGE_SIZE
            }
            # 发送 GET 请求
            response = requests.get(BASE_URL, params=params, timeout=10)
            response.raise_for_status()  # 抛出请求异常
            data = response.json()

            # 提取当前页技能列表
            skills_list = data.get("data", {}).get("records", [])
            if not skills_list:
                print(f"\n📌 第 {page_num} 页无数据,抓取完成!")
                break

            # 清洗核心字段(按需增减)
            for skill in skills_list:
                skill_info = {
                    "技能ID": skill.get("id", ""),
                    "技能名称": skill.get("name", ""),
                    "技能描述": skill.get("description", "").replace("\n", " ").replace("\r", ""),
                    "作者": skill.get("author", ""),
                    "分类": skill.get("category", ""),
                    "标签": ", ".join(skill.get("tags", [])),
                    "创建时间": skill.get("createTime", ""),
                    "更新时间": skill.get("updateTime", ""),
                    "点赞数": skill.get("likeCount", 0),
                    "下载数": skill.get("downloadCount", 0),
                    "技能链接": f"https://clawhub.com/skill/{skill.get('id', '')}"
                }
                all_skills.append(skill_info)

            print(f"✅ 成功抓取第 {page_num} 页,当前累计:{len(all_skills)} 条")
            page_num += 1
            time.sleep(DELAY)  # 友好延时

        except Exception as e:
            print(f"❌ 第 {page_num} 页抓取失败:{str(e)}")
            time.sleep(DELAY * 2)
            continue

    return all_skills

def save_to_csv(skills_data, output_path):
    """保存数据到 CSV 文件"""
    if not skills_data:
        print("⚠️ 无数据可保存")
        return

    df = pd.DataFrame(skills_data)
    df.to_csv(output_path, index=False, encoding="utf-8-sig")
    print(f"\n🎉 数据保存成功!文件路径:{output_path}")
    print(f"📊 总抓取技能数量:{len(skills_data)} 条")

if __name__ == "__main__":
    # 执行抓取
    skills_data = fetch_all_clawhub_skills()
    # 保存文件
    save_to_csv(skills_data, OUTPUT_FILE)

四、代码核心说明

  1. 接口适配
    • 目标接口:https://api.clawhub.com/skills,支持 page(页码)和 size(每页条数)参数;
    • 数据结构:接口返回 records 数组,包含所有 Skills 详情。
  2. 数据清洗
    • 剔除换行符、格式化标签列表,保证 CSV 打开无乱码;
    • 自动生成技能详情页链接,直接点击即可访问。
  3. 防限制处理
    • 添加 time.sleep(DELAY) 请求间隔,模拟正常访问;
    • 异常捕获 + 重试机制,避免网络波动导致程序中断。
  4. 输出格式
    • 编码使用 utf-8-sig,Excel 打开无中文乱码
    • 包含 11 个核心字段,覆盖技能全量信息。

五、运行效果

执行代码后,控制台会实时打印抓取进度:

plaintext

🚀 开始抓取 ClawHub Skills 数据...
✅ 成功抓取第 1 页,当前累计:20 条
✅ 成功抓取第 2 页,当前累计:40 条
...
📌 第 X 页无数据,抓取完成!

🎉 数据保存成功!文件路径:clawhub_all_skills.csv
📊 总抓取技能数量:XXX 条

运行结束后,会在当前目录生成 clawhub_all_skills.csv 文件,用 Excel/WPS 直接打开即可查看所有 Skills 数据。

六、注意事项

  1. 合规使用:本代码仅用于学习交流,请勿用于商业用途,遵守 ClawHub 平台规则;
  2. 请求频率:不要调低 DELAY 参数,避免请求过快被平台封禁 IP;
  3. 接口变更:若平台接口更新,只需修改 BASE_URL 和数据提取字段即可适配。

七、扩展玩法

  1. 数据可视化:结合 Matplotlib/Seaborn 绘制技能分类、点赞数排行榜;
  2. 定时更新:搭配定时任务,每日自动抓取最新 Skills 数据;
  3. 数据库存储:将 CSV 数据导入 MySQL/PostgreSQL,搭建本地技能库。

总结

  1. 这是一套开箱即用的 ClawHub Skills 爬虫,无需额外配置,直接运行即可;
  2. 代码轻量化、易修改,适合新手学习 Python 网络请求、数据清洗、文件存储;
  3. 抓取的数据结构化完整,可直接用于 AI 技能分析、资源整理等场景。
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)