V2EX 10月31日 13:02
AI Agent 抓取网页新工具:@isdk/web-fetcher
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

为了解决 AI Agent 与 Web 交互的难题,作者开发了 @isdk/web-fetcher 工具。现有工具要么过于底层,要么不够灵活,而该工具旨在提供一个跨引擎一致性的解决方案。它基于 Crawlee 库,抽象了 HTTP 和 Browser 模式的共有行为,允许 AI 通过生成简单的 JSON 来指挥浏览器执行任务,而非编写复杂的代码。核心功能包括双引擎架构(HTTP 和 Browser)、统一的操作模型、声明式操作脚本、强大的数据提取、内置反爬以及易于扩展的特性。该项目为 AI Agent 与 Web 交互提供了更便捷、灵活的途径。

💡 **统一操作模型,降低 AI 交互成本**:@isdk/web-fetcher 最大的亮点在于其统一的操作模型。它抽象了 HTTP(基于 Cheerio)和 Browser(基于 Playwright)两种引擎的共性行为,提供了一套一致的 actions API。这意味着 AI 只需要学习一套 API 即可在不同模式下进行抓取,大大降低了 AI 生成复杂交互逻辑的难度,使其能够通过简单的 JSON 来“指挥”浏览器完成任务。

⚙️ **双引擎架构,满足不同网页抓取需求**:该工具提供了灵活的双引擎架构。用户可以选择基于 Cheerio 的 HTTP 模式来极速抓取静态内容,效率极高;也可以选择基于 Playwright 的 Browser 模式来处理复杂的动态网页,如 JavaScript 渲染的内容。这种设计能够根据网页特性选择最合适的抓取方式,兼顾速度与能力。

📜 **声明式脚本与强大数据提取,简化开发流程**:通过声明式操作脚本,用户可以用 JSON 来定义多步骤的任务流,如登录、填表、点击等,AI 生成这些 JSON 的成本远低于生成命令式 JS 代码。同时,支持声明式的 Schema 进行数据提取,能够轻松从页面获取结构化数据,进一步简化了开发流程。

🛡️ **内置反爬机制,提升抓取成功率**:在 Browser 模式下,@isdk/web-fetcher 内置了 `antibot: true` 选项,能够处理一些常见的 Cloudflare 验证等反爬虫机制。这使得在抓取动态网页时,成功率更高,减少了因反爬而导致的抓取失败。

🧩 **易于扩展,支持自定义操作**:项目设计易于扩展,允许开发者封装常用的操作,例如将“登录知乎”封装成一个 `loginToZhihu` 的自定义动作。这种可扩展性使得该工具能够适应更广泛的应用场景,并能根据特定需求进行定制。

最近一直在折腾 AI Agent ,发现让 Agent 可靠地与 Web 交互是个大难题,现有工具要么太底层,要么不够灵活。所以动手撸了一个轮子: **@isdk/web-fetcher**,想和大家分享一下,也希望能得到一些反馈。

解决了什么痛点?

你可能会问,为啥不用 fetch 或 Playwright/Crawlee ?

我不想重复造轮子,所以底层用了Crawlee来处理。

我的目标是在 Crawlee 之上构建一个跨引擎一致性:抽象/模拟 HTTP 与 Browser 的共有行为,声明式的“意图层”,让 AI 可以通过生成简单的 JSON 来“指挥”浏览器完成任务,而不是去写具体的执行代码。

核心功能


快速上手:提取个标题

注意,下面的代码不关心目标 URL 是静态还是动态的,extract 操作在两种模式下都有效。

import { fetchWeb } from '@isdk/web-fetcher';async function getTitle(url: string) {  const { outputs } = await fetchWeb({    url,    actions: [      {        id: 'extract',        params: {          selector: 'title', // 提取 <title> 标签内容        },        storeAs: 'pageTitle', // 结果存到 outputs.pageTitle      },    ],  });  console.log('页面标题:', outputs.pageTitle);}getTitle('https://www.v2ex.com');

进阶玩法:多步表单提交 (Google 搜索)

这个例子展示了如何用 JSON 指挥浏览器执行一系列动作。

import { fetchWeb } from '@isdk/web-fetcher';async function searchGoogle(query: string) {  const { result } = await fetchWeb({    url: 'https://www.google.com',    engine: 'browser', // 显式指定需要浏览器环境    actions: [      // 步骤 1: 找到输入框并填入内容      { id: 'fill', params: { selector: 'textarea[name=q]', value: query } },      // 步骤 2: 提交表单      { id: 'submit', params: { selector: 'form' } },      // 步骤 3: 等待搜索结果容器加载出来      { id: 'waitFor', params: { selector: '#search' } },    ]  });  console.log('搜索结果页 URL:', result?.finalUrl);}searchGoogle('V2EX');

项目状态

项目刚起步,核心架构已经搭好。下一步计划是实现更智能的抓取策略(比如发现 http 模式拿不到内容时,自动升级到 browser 模式)。

项目是开源的,欢迎大家试用、Star 、提 Issue ,或者狠狠地拍砖!感谢。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI Agent Web Fetching Web Scraping Crawlee Playwright Cheerio JavaScript JSON 开源
相关文章