scrapling-article-fetch
Installation
SKILL.md
将文章正文抓取为 Markdown,并按需要写入飞书文档供用户验收。
前提条件
- Python 3.10+。
- 运行环境满足以下其一:
- 推荐:已安装
uv - 备选:可用的
venv + pip
- 推荐:已安装
- 机器可访问目标 URL。
- 如需写飞书文档,默认直接使用 skill 内脚本按“当前 agent 身份”直连 Feishu OpenAPI;不要手动传
app_id/app_secret。
环境检查(必须先做)
在真正抓取前,先检查当前环境是否具备 Python。不要假设系统一定有 python 别名;统一先跑 wrapper:
bash ~/.openclaw/skills/scrapling-article-fetch/scripts/run_pipeline.sh
这个 wrapper 会优先选 python3,其次 python,避免再次出现“环境有 Python,但入口命令写死导致误判”的问题。
执行规则:
- 若
python_ok=true:继续执行抓取。 - 若没有 Python 或版本低于 3.10:先提醒用户安装,或在征得用户同意后再帮装;不要直接跳过检查硬跑。
- 若没有
uv但有可用 Python:可以继续,只是改用venv + pip方案。
执行命令(抓取)
在受管控 Python 环境中,优先使用 uv:
uv run --with 'scrapling[fetchers]' --with html2text python ~/.openclaw/skills/scrapling-article-fetch/scripts/scrapling_fetch.py <url> [max_chars]
默认 max_chars=30000。
执行方式(Markdown → 飞书文档)
当需要把抓取结果写入飞书文档时,默认仍使用 md_to_feishu_doc.py,但不要让模型自由手写标题字符串。
推荐调用方式:
python3 ~/.openclaw/skills/scrapling-article-fetch/scripts/md_to_feishu_doc.py <article_json_or_title> <src_url> <markdown_file> [doc_id] [user_open_id]
说明:
- 第 1 个参数既可以传标题字符串,也可以直接传
scrapling_fetch.py --json产出的.json文件路径。 - 飞书场景默认应传
.json文件路径,让写文档脚本直接读取其中的title字段;不要让模型自己概括标题。 - 如果传入的是普通标题字符串,但它明显像正文第一句/小标题,脚本会自动降级,从 Markdown 中再取标题,减少新 agent 传错标题的概率。
user_open_id建议传当前用户 open_id,脚本会自动补编辑权限。doc_id可选;传入时表示覆盖更新已有文档,不传则新建文档。- 飞书写入脚本只负责把上游已经产出的 Markdown稳定写入文档;不要在写入阶段再自行抓原网页补封面,封面缺失要回到上游抓取脚本修。
抓取规则
脚本必须按以下逻辑执行:
- 使用
Fetcher.get()拉取页面 HTML。 - 如果域名是微信公众号(
mp.weixin.qq.com),优先尝试:#js_content.rich_media_content.rich_media_area_primary
- 再尝试通用选择器:
articlemain.post-content[class*="body"]
- 用
html2text转为 Markdown。 - 默认保留链接和图片。
- 清理常见微信尾部噪音(扫码提示、授权弹窗等文案)。
- 按
max_chars截断。 - 若未命中正文容器,回退为整页 HTML 转换结果。
默认交付流程(必须执行)
当用户让你抓取公众号/文章时,默认执行以下流程,不需要额外确认:
- 先检查运行环境:
- 是否有 Python 3.10+
- 是否可用
uv或venv + pip - 如果没有 Python,不要假设用户环境已具备;应先提醒用户安装,或在征得用户同意后再帮装。
- 运行抓取脚本,得到 Markdown 和 JSON。
- 判断当前聊天渠道:
- 如果当前在飞书,默认调用
md_to_feishu_doc.py,并把抓取生成的.json文件路径作为第 1 个参数传入,按当前 agent 身份创建并写入飞书文档 - 调用时传当前用户 open_id,确保用户自动拿到编辑权限
- 不要让模型自己拼标题参数
- 如果不在飞书,为保证用户体验,直接把抓取结果以 Markdown 代码块形式回复给用户,而不是返回飞书链接
- 如果当前在飞书,默认调用
非飞书场景回复模板
当当前渠道不是飞书时,直接使用脚本生成代码块回复:
python3 ~/.openclaw/skills/scrapling-article-fetch/scripts/render_markdown_reply.py <title> <url> <markdown_file>
如果当前机器没有 python3 但有 python,则改用 python。实际执行时优先复用前面 wrapper 已选出的解释器,不要手写死。
输出格式固定为:
```markdown
# <文章标题>
原文链接:<url>
<完整 Markdown 正文>
```
不要再额外创建飞书文档,也不要只回一个链接。
- 将完整抓取结果交付给用户,至少包含:
- 原文链接
- 标题
- 完整正文(含图片)
仅当用户明确说“不要写飞书文档”时,才只返回文本。
备注
- 如果页面高度依赖 JS 导致抓取为空,后续可切换 DynamicFetcher 变体。
- 输出格式保持稳定,便于与原文逐段对照验收。
- 默认写飞书文档时,由脚本自动解析当前 agent 对应的飞书账号并直连 Feishu OpenAPI;不要手动传凭证。
Related skills