Back to skills
extension
Category: Data & AnalyticsNo API key required

网页高清图 → Eagle 采集与自动打标

把任意网页(含国内各类站点:国内主流图文社区、微信公众号、ArchDaily 等建筑图库、普通网页等)的高清图片采集进 Eagle,并按用户自己的 Eagle 标签库(metadata.json 的 tagsGroups)自动打标,不新增任何标签。三种采集方式:① 内置浏览器油猴脚本(references/eagle-quick-save.user.js)——覆盖所有网页、按站点自动分文件夹、解析高清原图、支持预览勾选,并已自带无效图过滤 + 逐图上下文写备注;② `web` 子命令(直接把任意网页链接发给我)——WorkBuddy 侧 Python 通用抓取,一条龙:高清下载→按来源站点进 Eagle 文件夹→启发式打标;③ skill 的 `fetch` 固定流程——链接→下载→打标→导入(国内主流图文社区已全链路验证)。打标用 tag-eagle 给已入库 item 批量加标签,读取备注里的上下文实现逐图差异化打标。文件夹命名与油猴脚本一致:Instagram→ins、国内主流图文社区→xhs、微信公众号→微信公众号,其它站点用域名。验证状态:国内主流图文社区整条流程已完整跑通;油猴脚本对该社区/ArchDaily/ins/普通网页存图已实测;`web` 命令已实测:微信公众号(微信文章) 整条闭环跑通,并带 banner/导栏/tracking pixel 过滤,且按每张图周边文字上下文(小标题/图注/前后段落)逐图差异化打标(封面图/分析图/室内图各得不同标签),不再靠尺寸比例猜构图。Use when the user wants to collect web images (any site, especially Chinese sites) into Eagle and tag them with their own Eagle tag library, or when items already in Eagle need tagging.

personAuthor: user_d4149037hubcommunity

网页高清图 → Eagle 采集与打标(通用版)

把任意网页的高清图片采集进用户的 Eagle,并按「用户自己的 Eagle 标签库」打标。 本技能不依赖任何个人机器路径:Eagle 库路径在运行时自动探测,标签白名单来自 用户库本身的 tagsGroups,目标文件夹由用户指定(不存在则自动创建)。

适用网址范围:不限于特定平台。油猴脚本(见「推荐采集方式」)可在所有网页 上存高清图,已实测可用的站点包括:国内主流图文社区笔记页、微信公众号文章、ArchDaily 等 建筑图库、以及各类普通网页(国内站点居多)。只要页面上有 <img>,基本都能抓。

何时使用

  • 用户在任意网页(最常见是国内主流图文社区的笔记页,如 example.com/notes/...example.com/explore/...)浏览,想顺手把高清图存进 Eagle —— 用油猴脚本最省事。
  • 用户发来一个国内主流图文社区笔记链接,要求把图片下载并自动打标存进 Eagle —— 用 skill 固定流程(已验证)。
  • 用户发来任意国内/国外网页链接(如 https://某设计博客/一篇有图的文章),要求把高清图下到 Eagle、按来源分文件夹、打标签—— 用 web 子命令一条龙(见「方式二」)。
  • 用户发来一个 Instagram 帖子链接(instagram.com/p/...instagram.com/reel/...), 要求把图片存进 Eagle(通常放进名为「ins」的文件夹)—— 油猴脚本可存图,但整条自动流程尚未验证。
  • 用户要求「按我的标签库打标 / 不新增标签」。
  • 这是一个可复用的固定流程:链接 → 下载 → 识别打标 → 导入 Eagle(国内主流图文社区已全链路验证;web 命令已泛化到任意网页)。
  • 平台自动识别fetch 按链接域名走国内主流图文社区/Instagram 分支;web 则抓取任意网页,用户直接贴链接即可。

支持范围与验证状态

| 采集方式 | 支持站点 | 高清图 | 自动打标 | 整条流程验证状态 | |----------|----------|--------|----------|------------------| | 油猴脚本(Tampermonkey) | 所有网页(任意含 <img> 的页面) | ✅ 自动升级(ArchDaily medium_jpglarge_jpg、去缩略图参数等) + 过滤小图/banner/导栏/黑名单 | 存图时已把每张图的上下文写进备注;之后跑 tag-eagle 会按备注里的上下文逐图差异化打标 | ✅ 存图已实测:国内主流图文社区 / ArchDaily / 普通网页 | | skill Python 固定流程 | 国内主流图文社区(主)、Instagram(分支) | 取决于源站直链 | ✅ tag 启发式 + tag-eagle | ✅ 国内主流图文社区已完整跑通;⚠️ Instagram 分支未做完整闭环验证 | | web 命令(直接发链接给我) | 任意网页(国内站点为主,含被墙国外站走代理) | ✅ 通用高清化 + 过滤(微信 mmbiz→原图、ArchDaily→large_jpg、Unsplash→2400px;自动过滤 banner/导栏/图标/tracking pixel) | ✅ 一条龙:fetch→按来源站点进文件夹→逐图文字识别打标 | ✅ 已实测整条闭环:微信公众号(微信文章) → 有效高清图进「微信公众号」文件夹 → 按每张图周边文字上下文逐图差异化打标(封面/分析图/室内各得不同标签) | | tag-eagle 打标 | 任意已入库 item(不限平台) | — | ✅ 批量加标签 | ✅ 通用可用 |

关键说明

  • 油猴脚本的「网址范围」最宽——国内各类站点(国内主流图文社区、微信公众号、建筑图库、电商、普通博客等)的高清图都能存,不挑平台。
  • 文件夹命名与油猴脚本保持一致:Instagram → ins,国内主流图文社区 → xhs,微信公众号 → 微信公众号,其它站点用域名(如 archdaily.com)。避免出现「微信公众号」和 mp.weixin.qq.com 两个同名不同来源的文件夹。
  • web 命令已过滤常见无效图:尺寸过小(<400px 短边)、比例过宽(>1.8 的 banner/导栏条)、文件过小(<5KB 的 tracking pixel / 0x0 gif)以及 URL/文件名含广告/分享/二维码等关键词的图片会被自动跳过。
  • 打标已差异化(逐图文字识别):同一篇文章的多张图不再套同一组标签。web 抓取和油猴脚本都会在每张图入库时把周边文字上下文(alt/标题/图注/前后段落)写进备注;tag-eagle 读取备注后,会先聚合算出「全篇主题标签」,再按每张图自己的上下文算出「本地标签」,最终标签 = 全篇主题(前 2) + 单图本地命中。尺寸比例构图线索仍作为备注补充信号保留(鸟瞰全景/室内表现/平面总图)。
  • 整条 skill 流程(采集 + 自动打标)目前「国内主流图文社区」和「微信公众号」已完整跑通验证。Instagram 用 Tampermonkey 那套只验证了「能存图」,自动抓取 + 轮播打标的完整闭环尚未验证跑通——遇到 Instagram 需求时优先用油猴脚本存图,再 tag-eagle 打标。

前置条件

  1. Eagle 正在运行,且当前打开的就是目标库(技能通过 Eagle 本地 API 端口 41595 通信,并从其 Settings 自动定位库路径)。
  2. 国内主流图文社区:网络可访问该社区域名。未登录态往往被反爬拦截——抓不到图时, 让用户提供浏览器登录 Cookie(传给 fetch --cookie),或改用 Eagle 官方 浏览器插件把图收进库后再用本流程打标。
  3. Instagram(两种模式,越简单越好)
    • 极简模式(推荐,零配置):直接把 Instagram 帖子链接发来即可。fetch 会先走 Instagram 公开的 oEmbed 接口instagram.com/oembed无需任何登录 Cookie) 拿到帖子封面图并下载进 Eagle。适合「只发链接就存图」的场景。
    • 完整模式(需一次 Cookie):若你想要全部轮播图 + 自动打标,提供一次登录 Cookie(浏览器 F12 → Network → 对能打开帖子的 bz?__a=1 请求右键 → Copy as cURL (bash) → fetch <URL> --cookie-curl "<整段cURL>")。Cookie 会缓存到本地 ~/.workbuddy/ins_cookie.txt,之后只发链接即可走完整模式。
    • Instagram 在国内通常被墙,fetch自动探测本机常见代理端口(如 7897/7890/1080)走代理;若你的代理不在这些端口,用 fetch --proxy "http://127.0.0.1:端口" 显式指定。
  4. 用户的 Eagle 库里最好已有一套标签库(tagsGroups 非空),作为打标白名单。

推荐采集方式:浏览器一键存图脚本(零 Cookie / 零代理)

技能自带一个 Tampermonkey 油猴脚本 references/eagle-quick-save.user.js,是最省事、 最稳的采集方式——不用折腾 Instagram 登录 Cookie、不用管本机代理、不怕反爬,因为取图 用的是你浏览器里已登录的会话

  1. 装油猴扩展:浏览器安装 Tampermonkey
  2. 新建脚本 → 全选 → 把技能目录里 references/eagle-quick-save.user.js 的内容粘进去 → 保存(脚本已验证可在 Instagram 帖子页解析出全部轮播高清原图,并复用已有的同名文件夹)。
  3. 打开要收藏的页面(任意网站都行:Instagram 帖子 / 国内主流图文社区笔记 / 微信公众号文章 / 普通网页)。
  4. 点页面右下角「存到 Eagle」按钮 → 先弹出图片预览面板,每张图带勾选框(默认全勾): 只勾选你想保存的图,点「保存到 Eagle」才存;支持「全选 / 全不选」,点面板外或 ✕ 取消。 图片进对应文件夹:Instagram → ins,国内主流图文社区 → xhs,微信公众号 → 微信公众号, 其它网站 → 用域名作文件夹名(如 example.com)。 文件夹已存在则复用(不再重复新建)。 Instagram 只解析「当前这一个帖子」的图(不混推荐帖);其它网站抓取整页所有可保存的图片(自动过滤图标/头像/logo)。 对 ArchDaily 等建筑图库,脚本会把 medium_jpg / small_jpg / thumb_jpg 自动升级为 large_jpg(2000px 级别高清),无 _jpg 后缀的旧路径则升级为 slideshow,和 Eagle 官方扩展右键存图效果一致。
  5. 收集完后,用 tag-eagle 给该文件夹一键打标(见下)。

脚本未启用时不影响技能任何其它功能。若你更习惯 Eagle 官方浏览器插件,也可以直接用 它把图拖进库(按域名自动分文件夹),后续打标流程完全一样。Instagram 帖子页用油猴脚本存图已可用,但「抓取 + 自动轮播打标」的完整 skill 流程尚未验证跑通,故 Instagram 场景建议走「油猴存图 → tag-eagle 打标」两段式。

方式二:直接发链接给我(WorkBuddy 侧 Python 通用网页抓取)

不想装油猴、或想让我自动批处理时,直接把任意网页链接发来即可。技能用 web 子命令 在 WorkBuddy 侧抓图,整条流程一条龙:高清下载 → 按来源域名进 Eagle 文件夹 → 启发式打标。

  • 网址范围:不限平台,国内各类站点(国内主流图文社区 / 微信公众号 / 建筑图库 / 电商 / 普通博客等)都能抓; 国外站点(Instagram / ArchDaily 等)也能抓,被墙时加 --proxy http://127.0.0.1:7897
  • 高清处理:自动去缩略图尺寸后缀 / 放大宽度参数;微信 mmbiz→原图、ArchDaily 缩略图升级为 large_jpg、 Unsplash 升级为 2400px。
  • 过滤无效图:自动跳过 banner/导栏/tracking pixel/小图标(尺寸 <400px 短边、宽高比 >1.8、文件 <5KB、0x0 小 gif、URL/文件名含广告/分享/二维码等关键词)。
  • 按来源分文件夹:文件夹名与油猴脚本一致——Instagram→ins、国内主流图文社区→国内主流图文社区、微信公众号→微信公众号,其它站点用域名(如 example.com),已存在则复用。
  • 差异化打标(逐图文字识别):不再所有图套同一组标签。web 抓页面时会按文档顺序提取每张图的周边文字上下文(最近小标题、alt/title、图注 figcaption、前后段落文字),用轻量中文关键词提取(优先 jieba,缺失则 CJK n-gram 兜底)抽出「内容线索」写入备注;打标时每张图独立算标签 = 全篇主题标签(前 2) + 该图本地文字命中的标签。实测同一篇微信文章里封面图、建筑体量分析图、室内空间图各自得到不同标签(原先仅靠尺寸比例猜构图,现升级为按文章文字识别)。

命令:

python <skill>/scripts/xhs_to_eagle.py web "https://国内某网站/一篇有图的文章" \
  [--proxy http://127.0.0.1:7897] [--apply] [--min-size 400]
  • 默认先预览打标结果(不写 Eagle);确认无误加 --apply 真正写入标签。
  • 只下载不导入加 --no-import;导入后不打标加 --no-tag(之后手动 tag-eagle --folder <域名> --apply)。
  • 整条流程需要 Eagle 正在运行(下载 / 导入 / 打标三步都依赖本地 API 41595),且库里有标签库作白名单。

这是「固定流程」(fetchimporttagverify)的任意网页通用版fetch 只认 国内主流图文社区 / Instagram,web 则能抓任意网页。两者底层共用同一套高清化与按域名分文件夹逻辑。

收集完后用 tag-eagle 打标

无论用上面的油猴脚本还是 Eagle 官方插件,图进库后都统一用 tag-eagle 打标:

python <skill>/scripts/xhs_to_eagle.py tag-eagle --folder ins --dry-run
  • 默认预览:打印每个 item 的候选标签,不改动 Eagle
  • 确认无误后加 --apply 真正写入:
    python <skill>/scripts/xhs_to_eagle.py tag-eagle --folder ins --apply
    
  • 建筑类 / 英文文案等内置同义词覆盖不到的内容,加 --synonyms <同义词.json>
    python <skill>/scripts/xhs_to_eagle.py tag-eagle --folder ins \
      --synonyms "C:/Users/hj/WorkBuddy/煎鸡蛋-0803/tmp_ig_demo/building_synonyms.json" --apply
    
  • 已存在于 item 上的标签会自动跳过(不会重复),可放心反复跑。

文本来源 = item 名称 + 来源 URL + 备注(annotation);#话题 也会作为信号。 标签白名单仍是用户 Eagle 库本身的 tagsGroups

这条路的「采集」交给油猴脚本(它用你的浏览器登录态处理反爬),skill 只负责「打标」, 因此最稳。下面「固定流程」是给没装脚本、想全自动抓取的备选方案。

固定流程

步骤 0:确认环境与目标

  1. 运行 detect 确认能定位 Eagle 库:
    python <skill>/scripts/xhs_to_eagle.py detect
    
    若返回空,说明 Eagle 没运行过 / 路径探测失败,提示用户先启动 Eagle,或 在后续 import 时显式传 --lib <库路径>
  2. 询问用户两件事(若对话中已明确可跳过):
    • 目标文件夹:名称或 folderId(国内主流图文社区默认建议「xhs」,Instagram 默认建议「ins」, 不存在会自动创建)。
    • 标签规则:默认用用户库自带标签库;如需限定范围也可口头说明。
  3. folders / tags 列出当前库的文件夹与标签白名单,方便确认与后续匹配:
    python <skill>/scripts/xhs_to_eagle.py folders
    python <skill>/scripts/xhs_to_eagle.py tags
    

步骤 1:抓取并下载图片

python <skill>/scripts/xhs_to_eagle.py fetch "<笔记URL>" --out <临时目录> [--cookie "<Cookie>"] [--proxy "http://127.0.0.1:端口"]
  • 自动识别平台:链接含 instagram.com 走 Instagram 分支,否则走国内主流图文社区分支。
  • 国内主流图文社区:从 __INITIAL_STATE__ 与正文提取图片直链,严格过滤 JS/CSS、头像、 视频缩略图等站点资源,只保留真实图片。
  • Instagram:解析帖子内嵌 JSON(window.__additionalDataLoaded?__a=1 接口), 抽取单图 display_url 与轮播 edge_sidecar_to_children 的全部图片,并提取 文案与 #话题 作为打标文本信号。Instagram 必须带登录 Cookie(见前置条件)。
  • 下载到 <临时目录>,并写出 manifest.json(含图片清单、标题、文案、话题、来源 URL、作者)。
  • 图片按 img_00.jpg, img_01.jpg … 命名。
  • 若 0 张图片下载成功,脚本会明确报错并给出方案(传 --cookie / 用 Eagle 插件), 不要静默继续。

步骤 2:打标(二选一)

方案 A(推荐,不依赖视觉、可解释、可复核):启发式打标

  • 运行 tag 子命令,脚本用笔记的标题/正文/话题词与白名单做匹配,并打出每个标签的命中证据:
    python <skill>/scripts/xhs_to_eagle.py tag --out <临时目录> [--whitelist <白名单.json>] [--dry-run]
    
  • 默认从用户 Eagle 库读白名单;传 --whitelist 可不依赖 Eagle 运行(适合没启动 Eagle 时先打草稿)。
  • --top 5 控制最多标签数,--threshold 1 控制最低命中分数,--no-synonyms 关闭内置同义词,--synonyms <file> 自定义同义词表。
  • 命中结果按 score 降序打印(标题命中=3 / 话题=2 / 正文=1),低于阈值的标签直接丢弃。
  • 确认无误后去掉 --dry-run 写入 tags.json这是按整篇笔记打的候选集,每张图套用同一组标签;如需逐图差异,可手动编辑 tags.json

方案 B(视觉识别):AI 逐张识别

  • 用多模态能力逐张读取 <临时目录>/img_*.jpg,从白名单挑 2–5 个标签,写入 tags.json
  • 绝不使用白名单之外的标签(用户要求「不新增标签」)。

步骤 3:导入 Eagle

python <skill>/scripts/xhs_to_eagle.py import \
  --folder "<文件夹名或ID>" --out <临时目录> [--name-prefix "<备注>"]
  • 自动把文件夹名解析为 folderId(不存在则调用 Eagle API 创建)。
  • 逐张调用 POST /api/item/addFromPath,带上 tagswebsite(笔记 URL)、 name<备注或笔记标题>-<序号>)、folderId
  • 导入前会再次过滤掉 tags.json 中任何不在白名单的标签(兜底)。
  • 导入结果写入 <临时目录>/imported.json(含每张的 item id 与最终标签)。
  • 建议先加 --dry-run 预览将要执行的导入,确认无误后再正式导入。

步骤 4:校验

python <skill>/scripts/xhs_to_eagle.py verify --out <临时目录>
  • 读取 imported.json 中每个 item id,回查其 metadata.jsontags, 与导入时一致则打印 OK,否则 MISMATCH

脚本参考(<skill>/scripts/xhs_to_eagle.py

单一 CLI,子命令:

| 子命令 | 作用 | |--------|------| | detect | 跨平台探测并打印当前 Eagle 库路径 | | tags | 打印当前库标签白名单(tagsGroups 展平) | | folders| 打印当前库所有文件夹 id + name | | fetch | 抓取国内主流图文社区/Instagram 图片下载到 --out--cookie / --proxy / 自动读缓存) | | import | 按 tags.json 导入指定文件夹(--dry-run 可预览) | | tag | 按笔记文本启发式打标,写入 tags.json(--dry-run 可预览) | | tag-eagle | 给 Eagle 文件夹里已有 item 批量打标(--apply 才写入;配合 Eagle 插件收集) | | web | 抓取任意网页高清图并一条龙按来源域名进 Eagle 文件夹 + 打标(--proxy / --no-import / --apply) | | verify | 校验已导入项的标签是否正确 |

跨平台说明:库路径探测依次检查 %APPDATA%/Eagle/Settings(Windows)、 ~/Library/Application Support/Eagle/Settings(macOS)、 ~/.config/Eagle/Settings(Linux)中的 libraryHistory,取第一个存在 metadata.json 的库。

常见问题

  • Eagle 未运行 / API 不通:启动 Eagle,确认本地 API(41595)开启。
  • 抓不到图片 / 全是 FAILED:未登录态反爬。让用户从浏览器复制 Cookie 传 --cookie,或用 Eagle 官方浏览器插件把图收藏进库后再走 import 流程。
  • 标签匹配困难:先跑 tags 看用户白名单全貌,再让模型从里面选;严格不超出。
  • 重复导入:同一链接再跑会产生重复项;导入前可按文件名/来源在库里查重, 或用户确认覆盖。
  • 用户库没有标签库tags 为空时无法自动打标,图片会无标签导入;此时建议 用户先在 Eagle 里建好标签库,或口头提供一套标签供本次使用。
  • Cookie 不用每次重输:国内主流图文社区 Cookie 缓存到 ~/.workbuddy/xhs_cookie.txt, Instagram Cookie 缓存到 ~/.workbuddy/ins_cookie.txt;下次直接 fetch <URL> 即可 自动带上(也可 --cookie-file 读 Eagle 插件导出的 cookie)。Cookie 含登录态,注意保管。
  • Instagram 抓不到图:几乎都是未登录墙或代理问题。请确认:①传了从已登录 Instagram 浏览器复制的 --cookie;②本机有可达的代理(脚本自动探测 7897/7890/1080 等端口,否则用 --proxy 显式指定)。Cookie 失效/被风控会返回 401/403,需重新复制。
  • Instagram Cookie 被拒(错误码 1357004 / "很抱歉发生错误"):这是 Cookie 不完整 导致的——只给 cookie: 头的子集(缺 shbid/shbts/dtsg 等)会被 Instagram 拒。 最稳的解决方式:在 Network 面板里,对那个能正常打开帖子的 bz?__a=1&... 请求 点右键 → Copy → "Copy as cURL (bash)",把整段粘贴给技能,用 fetch <URL> --cookie-curl "<整段cURL>" 运行——脚本会自动从中提取完整 Cookie 与 所有请求头。脚本也会自动对 %3A 之类做解码、走主页 www-claim 校验流程。
  • Instagram 是英文文案:内置同义词表已补充英文别名(interior/cafe/handmade/ garden 等),tag 仍能把英文话题映射到中文标签库;若仍不准,用 --synonyms 自定义 或调高 --threshold
  • 启发式打标不准怎么办tag 是文本信号匹配,不是看图——它给的是「候选」 而非「定论」。先看 --dry-run 输出,删掉不合适的、补上漏的,再正式写 tags.json。要更准可加 --synonyms 自定义别名或调高 --threshold
  • 用油猴脚本 / Eagle 插件收集后怎么打标:直接 tag-eagle --folder <文件夹名> --apply。 默认预览(不改动),加 --apply 才写入;已存在的标签自动跳过不重复。建筑类等 英文内容加 --synonyms 补同义词。注意 tag-eagle 需要 Eagle 正在运行(读 item/list)。
  • 一键存图脚本在哪 / 怎么装:脚本在技能目录 references/eagle-quick-save.user.js。 装 Tampermonkey 后在新建脚本里全选粘贴保存即可。支持 Instagram / 国内主流图文社区 / 微信公众号 页面,点右下角「存到 Eagle」按钮存图。建议从技能文件复制,避免复制对话里的长文本时 混入不可见字符导致脚本不执行(表现为按钮消失)。
  • 油猴脚本「保存失败:未能从页面解析出图片」:确认当前打开的是具体帖子页 (instagram.com/p/短码/),不是个人主页或 Explore。Instagram 改版频繁,若内嵌 JSON 解析失效,脚本会依次尝试 data-sjs 解析 → 旧内嵌 JSON → DOM 兜底;仍失败请把弹窗文字与 F12 Console 里 [Eagle Quick Save] 开头的日志反馈,以便调整解析器。
  • 油猴脚本每次都新建文件夹:正常不会——脚本先 GET /api/folder/list 查已有同名根 文件夹并复用其 id;只有查不到才新建。若仍出现重复文件夹,多为 Eagle 里有多个同名根 文件夹,删掉多余的即可。
  • tag-eagle 找不到文件夹:先 folders 看现有文件夹名/id;tag-eagle--folder 只查找、不会新建(避免误建空文件夹),确认名字拼写与 folders 列表一致即可。
  • tag-eagle 打出空标签:说明 item 名称/URL/备注里没有命中白名单的词。先 tags 看白名单全貌,再决定加 --synonyms 或口头提供别名;也可用 Eagle 插件 收藏时把页面标题/描述保留完整,文本信号更足。

输出

  • 笔记图片进入用户指定 Eagle 文件夹,每张带 2–5 个「用户标签库内」的标签, 无新增标签。
  • 过程产出:manifest.json(图片清单)、tags.json(标签分配)、 imported.json(导入回执),可供追溯。