从零开发你的第一个 OpenClaw Skill:让 AI 自动抓取网页并生成每日简报

找不到 OpenClaw 插件开发文档?这篇 5000 字干货教程带你从零手写第一个 Custom Skill。详解 Tool Schema 架构、Python 爬虫执行逻辑与本地封装测试。并揭秘如何将极客玩具升级为抗风控的企业级社媒引流工具。

2026-03-09 Jumei 1210 阅读 0 评论

很多开发者在刚刚接触 OpenClaw 时,都会被它接管本地电脑的能力所震撼。默认配置下,它可以帮你读取本地文件、监控系统状态,甚至通过终端执行简单的 Shell 命令。但是,如果你只停留在使用官方默认的工具,那你仅仅发挥了 OpenClaw 10% 的功力。

OpenClaw 真正的杀手锏在于它的极高可扩展性(Extensibility)。很多程序员不满足于现成的功能,他们希望 AI 能自动登录自己的公司内部系统、能每天定时去特定的新闻网站爬取数据、或者自动处理特定的 Excel 报表。然而,目前的官方开发文档还处于高速迭代中,缺乏一个从头到尾、带有实际业务逻辑的“Hello World”级别案例。

今天,我们将填补这一空白。在这篇近 5000 字的保姆级深度教程中,我们将带你从零开始,编写一个自定义的 Web Scraping(网页抓取)Skill。完成后,你只需要对 AI 说一句:“去帮我看看今天科技板块有什么新闻,整理个简报发给我”,它就会自动执行 Python 脚本抓取网页,并利用大模型的语义理解能力为你提炼出完美的数据。

一、 核心原理解析:OpenClaw Skill 的三层架构

在动手写代码之前,我们必须先搞懂 AI 是如何“调用”你的代码的。在传统的编程中,是 代码调用代码;而在 Agentic Workflow 中,是 自然语言驱动代码。这个转换过程,依赖于 OpenClaw 的三层 Skill 架构:

  1. Tool Schema(工具描述层 - JSON/YAML): 这是写给大语言模型(LLM)看的“说明书”。它告诉 AI 这个工具有什么用、需要传入什么参数(比如 URL)。AI 只有看了这个说明书,才知道什么时候该触发你的脚本。
  2. Execution Engine(执行逻辑层 - Python): 这是真正干活的代码。大模型本身无法联网抓取网页,它只能输出一段“请求调用爬虫函数”的 JSON 指令,OpenClaw 底层会捕获这个指令,并将参数传递给你的 Python 脚本执行。
  3. Registry(注册层 - config.yaml): 相当于告诉 OpenClaw 的主程序,去哪里加载你写好的说明书和代码。

💡 Function Calling(函数调用)的魔法

理解这套架构的核心在于理解 Function Calling。当你问 AI:“今天天气如何?”它如果只是个语言模型,它会说“我没有实时数据”。但如果你给了它一个名为 get_weather(city_name) 的 Tool Schema,它就会回复一段机器代码:{"tool": "get_weather", "args": {"city_name": "Beijing"}}。OpenClaw 拿到这段代码,去运行你的 Python 脚本,拿到 25度,晴 的结果后,再次喂给 AI,最后 AI 才会用自然语言对你说:“北京今天 25度,是个大晴天哦!”

二、 编写实战:开发“智能网页抓取器”

现在我们开始实操。我们的大目标是:开发一个名为 smart_web_scraper 的技能。

步骤 1:编写 Python 爬虫脚本 (Execution Logic)

在你的 OpenClaw 安装目录下,找到 /skills/custom/ 文件夹(如果没有就新建一个)。在里面创建一个 Python 文件,命名为 smart_scraper.py

我们将使用最经典的 requests 库来请求网页,用 BeautifulSoup 库来清理 HTML 标签,提取纯文本。请确保你在虚拟环境中安装了这两个库:pip install requests beautifulsoup4

import requests
from bs4 import BeautifulSoup
import logging
import json

def execute(url: str, max_words: int = 3000) -> str:
    """
    这是将被 OpenClaw 动态调用的主函数。
    它负责去目标网页抓取内容,并返回清洗后的纯文本。
    """
    logging.info(f"[SmartScraper] 收到 AI 抓取指令,目标 URL: {url}")
    
    # 设置一个常见的 User-Agent,防止被最基础的防爬虫机制拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    }

    try:
        # 发送网络请求,设置 10 秒超时
        response = requests.get(url, headers=headers, timeout=10)
        # 如果状态码不是 200,主动抛出异常
        response.raise_for_status() 
        
        # 使用 BeautifulSoup 解析 HTML
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 核心清理逻辑:移除所有的脚本、样式表、导航栏和页脚(这些对 LLM 提取内容是噪音)
        for element in soup(['script', 'style', 'nav', 'footer', 'header', 'aside']):
            element.decompose()
            
        # 提取网页中的纯文本,用空格分隔
        text = soup.get_text(separator=' ', strip=True)
        
        # 【极其重要】截断过长的文本,防止撑爆大模型的上下文窗口(Context Window)导致报错
        clean_text = text[:max_words]
        
        return json.dumps({
            "status": "success",
            "url": url,
            "extracted_content": clean_text
        }, ensure_ascii=False)

    except requests.exceptions.RequestException as e:
        logging.error(f"[SmartScraper] 抓取失败: {e}")
        # 如果报错,一定要把错误信息返回给 AI,让 AI 知道任务失败了,并能用自然语言反馈给用户
        return json.dumps({
            "status": "error",
            "error_message": f"无法访问该网站,请告知用户网络连接超时或被反爬虫拦截。详情: {str(e)}"
        }, ensure_ascii=False)

步骤 2:封装为 OpenClaw 可读格式 (Tool Schema)

代码写好了,大模型并不知道它的存在。我们必须在同一个 /skills/custom/ 目录下,创建一个同名的配置文件:smart_scraper.yaml。这是整个教程最关键的一步——你给 AI 的说明书写得越清晰,AI 使用这个工具就越聪明。

name: smart_web_scraper
description: "这是一个智能网页抓取工具。当用户要求你阅读某篇文章、提取某个网页的新闻、或者查看某个链接的内容时,你必须调用此工具。它会返回该网页的纯文本内容供你分析。"
entry_point: "smart_scraper.py:execute"
parameters:
  type: object
  properties:
    url:
      type: string
      description: "需要抓取的完整网页链接,必须以 http:// 或 https:// 开头。"
    max_words:
      type: integer
      description: "提取的字符数上限。如果用户需要深度阅读长文,你可以设置得大一些(例如5000),默认为3000。"
  required:
    - url

注意:description 字段里的每一个字都是极其宝贵的 Prompt。如果 AI 没有在应该调用爬虫的时候调用爬虫,通常是因为这里的描述写得不够明确。

步骤 3:在系统中注册并重启服务

最后一步,打开 OpenClaw 根目录下的主配置文件 config.yaml,将我们刚写好的技能添加进去:

skills:
  enabled_default:
    - file_reader
    - system_monitor
  custom_skills_path: "./skills/custom"
  # 在这里注册你自己的技能
  enabled_custom:
    - smart_web_scraper

保存文件后,重启你的 OpenClaw 服务(如果你是 Docker 部署的,执行 docker-compose restart)。

三、 本地测试:见证 AI 的魔法时刻

现在,打开你的 OpenClaw Web 界面或者接入好的 Telegram 机器人。我们将用一段复杂的自然语言来测试它。

你输入指令:
“去抓取一下 Hacker News (https://news.ycombinator.com/) 的首页,帮我找出今天排名前三的关于 AI 的新闻,并为我生成一份简报,包含标题和一句话总结。”

后台发生了什么(Agentic Workflow 启动):

  1. 大模型分析了你的指令,发现需要读取 news.ycombinator.com 的内容。
  2. 它查看了自己的工具箱,发现 smart_web_scraper 完美匹配。
  3. AI 输出一条底层指令:调用 execute(url="https://news.ycombinator.com/")
  4. 你的 Python 爬虫脚本瞬间启动,获取 HTML,清洗出几千字的纯文本,返回给大模型。
  5. 大模型在极其杂乱的纯文本中,利用其强大的语义理解能力,精准找出了关于 AI 的三条帖子内容。
  6. 最终,你在前端收到了完美的中文简报输出。

恭喜你!你已经成功开发了一个完整、闭环的自定义 AI 技能。你可以将这个 .py 和 .yaml 文件打包,上传到 ClawHub 与全球开发者分享,赚取你的第一批 GitHub Star!

四、 商业级思考:当你的“简报工具”需要抓取一万个同行账号时

通过上面的教程,你实现了一个优雅的自动化抓取工具。对于每天只抓取几篇新闻自己看,这个 Python 脚本完美无缺。

但是,当这项技术被投入到真实的“企业级出海营销”中时,它会瞬间崩溃。

很多跨境电商团队或者 B2B 外贸老板学会了这项技术后,立刻想到了一个点子:“既然 AI 能自动抓取网页,我能不能写个脚本,让 OpenClaw 每天去 Instagram 或 TikTok 上抓取 10,000 个同行大 V 的粉丝主页,找出他们的邮箱或联系方式,甚至自动发私信引流?”

当你用 requests 库或者无头浏览器去高频访问这些顶级社媒平台时:

  • 秒级拦截: 平台的 Cloudflare 盾或高级风控算法会瞬间识别出你没有真实的浏览器硬件指纹(Canvas/WebGL)。
  • IP 被封禁: 你公司的宽带 IP 会因为高频异常访问,被平台直接拉黑(即所谓的 IP 连坐)。
  • 0 播放与账号阵亡: 你用于执行任务的营销账号会被判定为机器行为,永久封号。

企业级矩阵获客的终极答案:物理环境隔离

想要在海外社交媒体上实现大规模的自动化抓取和引流获客,你需要的不仅是聪明的 AI 代码,更是绝对安全的底层运行环境。这就是为什么成熟的跨境团队都在使用 Jumei.ai (矩媒系统) 这样的云控平台,而不是自己写爬虫脚本。

Jumei 平台不使用容易被识别的 PC 端无头浏览器,而是为您提供了海量的 真实 ARM 云手机。当您需要在 TikTok 上抓取潜在客户或全自动铺设视频矩阵时,您的指令下发给了 100 台拥有独立主板、独立硬件指纹、独立海外原生 IP 的真实手机。对于平台的风控算法来说,这完全就是 100 个真实的人类在不同国家滑动着手机屏幕。

通过 Jumei 的可视化矩阵管理系统,您无需再编写任何 Python 爬虫,一键即可实现极其复杂的跨平台引流、内容去重分发和精准客资挖掘。真正做到了将个人极客的“玩具”,进化为企业级的流量战争机器。

五、 技能开发常见问题 (FAQ)

Q1: 为什么我的爬虫脚本遇到了 Cloudflare 的 503 报错?

A: 简单的 requests 库无法绕过 Cloudflare 或 Akamai 这种企业级反爬虫验证。如果你要抓取的网站防护较强,你需要将 smart_scraper.py 里的逻辑升级为使用 Selenium 或 Playwright(模拟真实浏览器行为),或者接入第三方的代理/打码 API。

Q2: 如果网页非常长,大模型返回的结果总是胡言乱语怎么办?

A: 这被称为“上下文窗口溢出”或“注意力丢失”。在上面的代码中,我们通过 text[:max_words] 进行了粗暴截断。高阶的做法是:在 Python 代码中加入 RAG(检索增强生成)逻辑。先将抓取到的长文本切片存储到本地向量库,然后让模型针对性地检索相关片段,这样可以极大地降低大模型产生幻觉(Hallucination)的概率。

Q3: 我可以把抓取到的数据自动保存到本地的 Excel 里吗?

A: 当然可以!这就是 Agentic Workflow 的魅力。你只需要再开发第二个 Skill 叫 save_to_excel(data)。当你在对话框中输入:“抓取今天的新闻并保存到桌面的新闻.xlsx中”,大模型会自动先调用 smart_web_scraper,拿到数据后,再自动调用 save_to_excel,形成完美的工作流串联。

J

Jumei

矩媒AI 内容团队

Article Info

Category: Openclaw Skills
Tags:
Views: 1210
Published: 2026-03-09 15:20:46

Free trial for one month

Start your first account,Use AI agents to solve overseas social marketing and lead generation

Start now