本地数据源获取引擎
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_287b0fec/crawler-assistant。
技能介绍
它解决什么问题
很多 Agent 在「获取内容」这一步重复劳动:同一个网页被反复抓取,章节 URL 要手工整理成清单,抓到的正文散落在临时变量里,下次查询又得重新走网络。更麻烦的是本地其实已经有数据——历史抓取入库的 SQLite、Skill 参考文档、工作区的 .md 文件——却因为缺少统一入口,没人去查。
工作方式:先查本地,未命中再抓
核心是一条「缓存优先,远程兜底」的链路。query_local() 作为统一查询入口,按路由表把请求发到 web、skill、workspace、memory、brain 五个本地源,再融合返回;fetch_or_cache() 负责查 crawler_db 缓存,命中直接返回 cache,未命中才调用 scrape_to_db() 远程抓取并写入 SQLite(含 FTS5 全文索引)。
抓取侧的能力分两层:
- 单页与并发:
scrape()同步抓单页,scrape_many()并发抓一批且不写文件,scrape_with_retry()带自动重试。 - 发现与批量:
bfs_scrape()从目录页做 BFS 自动发现章节 URL,BFSConfig控制深度、全局上限、域名、URL 白名单正则与排除目录;batch_scrape()是唯一的批量写入口,内部统一处理去重、排序、断点续传、正文清洗、进度报告、速率限制与分块。
借鉴 Crawl4AI 的三块能力
v1.2 引入 chunk_by_size() 分块策略,v1.3 加入 llm_extract() 结构化提取(实体、关键词、摘要),v1.4 补齐 BFS 爬取。设计上保持轻量内联,不引入 Docker、Playwright 或外部 API 依赖。embedding 引擎未安装时关键词抽取降级为空列表,不阻断主流程。
适用边界
- 它是文档/数据层获取工具,语义记忆(
brain、memory、lcm_grep)仍建议由 Agent 直接调用,引擎只提供统一查询入口。 raw.githubusercontent.com不可达时走 GitHub API 返回 base64,功能不受影响;但匿名限额 60 次/小时,超限会等待 60 秒再重试。- 依赖
httpx、parsel、aiohttp,正文提取走trafilatura,备路是readability-lxml。 - 腾讯 SkillHub 这类纯 JS 渲染站点暂不支持。
- BFS 默认
max_total=1000、max_depth=2是防失控约束,调大之前先确认目标站点的链接结构。
使用场景
- 接手一个几十章的在线教程,要从目录页自动发现全部章节 URL 并批量抓正文,不想手工整理链接清单
- 之前批量抓过一批产品文档,现在要再取其中某章的内容,希望直接命中本地库而不是重新请求网站
- 要把 GitHub clawhub 仓库里的 Skill 文档同步到本地库,后续按关键词全文检索做版本对比
- 批量抓取上百个章节时网络不稳或触发限流,需要断点续传、去重排序和自适应速率,而不是从头再来
适合人员
- 独立开发者:想给自研 Agent 加一个可控的网页抓取层,但不打算引入 Docker 或 Playwright 这类重依赖
- 技术内容工程师:负责把连载教程或文档站整站落成本地语料,需要自动发现章节、清洗正文、断点续传
- Agent 应用维护者:需要统一查询多个本地数据源(历史抓取、工作区文件、记忆文件)的入口
- 数据分析工程师:要从批量抓取的网页正文中抽取实体和关键词入库,做后续检索与统计