为什么
在和AI交互的过程中,我们经常需求获取外部网页的内容。这个问题看起来很简单,但实际上却需要注意不少点:
- 直接抓取网页返回的是HTML,里边包含大量的样式、脚本和内容无关的内容
- AI 模型的上下文窗口只有几K,虽然现在也有128K~200K的模型了,但Token单价会翻上好几倍
因此,我们开发了 fxd-app-fetch。
是什么
fxd-app-fetch 包含两个方法,main 方法用于获取 html 网页,json 方法用于获取 json 数据。
其中 main 方法采用无头浏览器打开网页获取完整的HTML,然后用 Readability 算法分析整个页面的正文部分,最终将其转换为 markdown 输出。
你也可以通过指定 output 参数来干预细节处理:
- output=raw :直接返回页面的完整HTML
- output=readable :返回通过 Readbility 算法提取后的HTML
- output=markdown:返回通过 Readbility 算法提取后并转换的 Markdown
- output=html:返回简化版的HTML,只保留其中的id、class和data-*参数,用于分析界面结构(例如生成selector)
如何使用
fxd-app-fetch 是一个 fxd app,你可以通过 fxd-cli 或者 FlowDeer 运行它。
在安装完成 fxd-cli 之后,你可以通过以下命令直接安装 fxd-app-fetch
fxd _install fxd-app-fetch
然后运行帮助命令,可以查看它的方法和对应的参数:
fxd fetch help
Version:
1.0.8
Usage:
fxd fetch [command] [options]
Command - main:
--url <string> 要获取的页面 URL (default: https://ftqq.com) (required)
--format <string> 返回数据格式 (default: text)
--output <string> 输出数据格式 (default: markdown)
--timeout <number> 超时时间 (default: 5000)
--headless <boolean> 是否启用后台模式 (default: true)
--user <string> 用户名 (default: default)
--wait_type <string> 等待类型 (default: domcontentloaded)
Command - json:
--url <string> 要获取的页面 URL (default: https://ftqq.com) (required)
--format <string> 返回数据格式 (default: text)
--timeout <number> 超时时间 (default: 5000)
使用实例
抓取并以json方式返回内容:
fxd fetch --url="https://ftqq.com" --format="json"
{
"content_format": "markdown",
"content": "时间充足的同学可以一页一页往下看。着急找东西的同学可以直接进入[分类目录](https://ftqq.com/cloumns/)。\n\n本网站为个人作品集,不开放评论,日常更新和互动请到[微博](https://weibo.com/easy)...)"
}
你也可以将其保存到文件供其他应用使用:
fxd fetch --url="https://ftqq.com" --format="json" > data.json
在Windows下,当执行命令的盘和nodejs安装的盘不是同一个时,执行 `fxd core install fxd-app-fetch` 的时候会出现路径错误。
例如在D盘安装 nodejs,然后在C盘执行命令行,就会出现安装到 C盘去的bug
原因是Windows下执行 cd 命令后,如果不是同一个盘符的话,命令行的上下文依旧不变,例如在 `C:\Users\XXX` 的上下文执行 `cd D:\\xxx\fxd-cli`命令,还是`C:\Users\XXX` 的上下文,需要再执行 `D:` 才会切换。
确实可能有这个问题,不过我对windows不太熟,暂时没想到怎么解决…
要不先用 wsl2 吧,我们开发和调试都在 mac/linux 下,因此兼容性会好一些。
对于 execSync, exec ,可以传入 第二个参数来指定上下文。例如:
execSync(‘node -v’, {
cwd: path,
})
指定了 cwd 之后就一定在这个目录下执行了
感谢反馈,我更新了一下,你把 package.json 中 fxd-app-core 的依赖改到 1.0.48 试试。
我的windows只有一块盘,运行是正常的,但不清楚你之前的情况是否已经解决。
我试了下已经可以了,问题解决。