SuperAPI AI 工具集

site-crawler

数据与分析

查看项目

更新于 10-15 15:28

技能介绍

Site Crawler 是一个用于爬取网站并从中提取内容的技能,其定位是「尊重目标站点地抓取文档站点与网页内容,用于 RAG 数据入库」。

用途

该技能面向需要把文档站点、博客、知识库等结构化内容采集下来并用于检索增强生成(RAG)的场景。资料指出,文档站点、博客和知识库中包含有价值的结构化内容,该技能覆盖四个方向:尊重式爬取(robots.txt、限速)、保留结构的抽取、增量更新(只获取发生变化的页面)以及基于 sitemap 的发现。

前置依赖

资料列出了所需依赖及安装命令:

  • HTTP 客户端:pip install httpx
  • HTML 解析:pip install beautifulsoup4 lxml
  • 干净的正文抽取:pip install trafilatura
  • Markdown 转换:pip install markdownify

爬取原则

资料明确了三条原则。

第一,尊重目标站点:始终检查 robots.txt;对请求限速(间隔 1-2 秒);用 User-Agent 标识自己;不要给服务器造成过载。

第二,保持高效:有 sitemap 时优先使用;记录已经爬取过的内容;只重新抓取发生变化的内容;跳过非内容页面(登录、搜索结果等)。

第三,保持智能:保留文档结构;只抽取有意义的内容;处理分页;检测并跟随文档结构。

主要能力

资料给出了若干能力模块与对应代码。

Robots.txt 合规检查:通过 RobotsChecker 类,在爬取前判断某个 URL 是否允许抓取,缓存各站点的解析结果;若不存在 robots.txt 则视为全部允许;并提供 get_crawl_delay 获取爬取延迟。

内容抽取:extract_content 函数从 HTML 中提取标题、正文、Markdown、各级标题(h1-h4)、链接与元数据。优先用 trafilatura 做干净抽取,失败时回退到手动抽取;extract_main_content 会移除 nav、footer、aside、script、style、header 等元素,再定位 main、article 或类名匹配 content/main/post/article 的容器,最后转成 Markdown。

文档结构抽取:extract_docs_structure 面向文档站点,提取标题、面包屑、侧边栏链接、正文以及上一页/下一页链接,资料称其可处理 Docusaurus、MkDocs、Sphinx、GitBook 等常见文档框架。

站点爬虫:SiteCrawler 类整合上述能力,提供 URL 归一化去重、同域判断、跳过规则(/search、/login、/signup、/auth、/api/、/_、/tag/、/category/ 以及 .pdf、.zip、.png、.jpg、.gif 等)、sitemap 获取与解析、异步爬取循环(含限速、robots 检查、非 HTML 跳过、发现链接入队)等。crawl_docs 方法则沿上一页/下一页链接线性遍历文档。

采集流水线:harvest_site 函数串联爬取与入库,支持 full、docs、sitemap 三种爬取模式,可设置最大页数与限速;入库时跳过正文过短的页面,用 URL 的 md5 生成文档 ID(形如 web_xxxx),并写入来源类型、来源 URL、域名、标题、采集时间、标题列表等元数据。

使用方式

资料给出的使用方式为:先按前置依赖安装 httpx、beautifulsoup4、lxml、trafilatura、markdownify,然后调用相应的 Python 类或函数,例如创建 SiteCrawler(base_url=..., rate_limit=..., max_pages=...) 并调用 crawl 或 crawl_docs,或直接调用 harvest_site(url=..., collection=..., max_pages=..., crawl_mode=..., rate_limit=...)。crawl 支持传入起始 URL 列表与是否使用 sitemap。

适用场景

适用于把文档站点、博客、知识库等内容采集并整理为可用于 RAG 的语料:例如按 sitemap 批量发现页面、按文档站点的上一页/下一页顺序线性采集,或对全站做带限速的遍历采集。

限制

资料未提供图形界面、托管服务、定价、性能指标或并发上限等信息,这些暂未提供。实际抓取效果受目标站点结构、robots.txt 规则与文档框架差异影响;资料中的跳过规则与选择器为示例实现,需按具体站点调整。运行环境、Python 版本要求与部署方式暂未提供。