LLM 生态下爬虫程序的现状与未来
最近出现一批与 LLM 有关的新的爬虫框架,主要分为两类:一类是为 LLM 提供内容抓取解析的,比如 Jina Reader,可以将抓取的网页解析为 markdown 这样的对 LLM 友好的内容;还有一类是通过 LLM+Agent 工作流方式来构建的下一代爬虫程序,比如 ScrapeGraphAI 等。
今天我们来分析这两类爬虫框架的原理并做简单的评价。
Jina Reader
Jina Reader 是 jina 开源的针对 LLM 的解析工具,不仅开源,还提供了 API 供免费调用。在 https://r.jina.ai/<url> 中填入 URL,然后请求这个地址,就能获取到对 LLM 友好的 Parsed Content(Markdown)。
例如访问 https://r.jina.ai/https://blog.google/technology/ai/google-deepmind-isomorphic-alphafold-3-ai-model/,会得到包含标题、来源、发布时间及 Markdown 内容的结构化数据。
ps:当前访问国内地址可能受限,可自行部署。
该 API 可以通过 HTTP Header 传递控制参数:
x-set-cookie: 转发 Cookie 设置(带 Cookie 的请求不会被缓存)。x-respond-with: 绕过 readability 过滤,支持markdown、html、text、screenshot模式。x-proxy-url: 指定代理服务器。x-no-cache: 绕过缓存(有效期 300 秒)。x-with-generated-alt: 启用图片描述生成功能。
安装
Reader 基于 Node.js 开发,需要 Node 环境,另外还依赖 Firebase。
- Node v18 (Node 版本 >18 时构建会失败)
- Firebase CLI (
npm install -g firebase-tools)
然后 clone 代码,安装:
git clone git@github.com:jina-ai/reader.git
cd backend/functions
npm install
原理分析
主要代码在 cloud-functions/crawler.ts 里,初步看是基于 civkit 开发了一个 Web 服务,入口代码是 crawl 方法。
HTTP 接口
核心流程包括 URL 参数解析,根据 HTTP 请求头做分别处理。关键逻辑在 cachedScrap(urlToCrawl, crawlOpts, noCache) 抓取内容和 formatSnapshot 格式化抓取内容。
async crawl(
@RPCReflect() rpcReflect: RPCReflection,
@Ctx() ctx: {
req: Request,
res: Response,
},
auth: JinaEmbeddingsAuthDTO
) {
// ... 省略鉴权和限流逻辑 ...
const urlToCrawl = new URL(normalizeUrl(noSlashURL.(), { : }));
customMode = ctx..() || ;
withGeneratedAlt = (ctx..());
noCache = (ctx..());
(!ctx..() && ctx..()) {
sseStream = ();
rpcReflect.(sseStream);
{
( scrapped .(urlToCrawl, crawlOpts, noCache)) {
formatted = .(customMode, scrapped, urlToCrawl);
sseStream.({ : , : formatted });
}
} (: any) {
}
sseStream;
}
}


