fxd-app-fetch:网页内容获取APP

为什么

在和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
如果对文章内容有疑问或者有经验分享,请在评论中留言,我们会及时回复。
5 comments
  1. 在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:` 才会切换。

  2. 确实可能有这个问题,不过我对windows不太熟,暂时没想到怎么解决…

    要不先用 wsl2 吧,我们开发和调试都在 mac/linux 下,因此兼容性会好一些。

    1. 对于 execSync, exec ,可以传入 第二个参数来指定上下文。例如:
      execSync(‘node -v’, {
      cwd: path,
      })
      指定了 cwd 之后就一定在这个目录下执行了

      1. 感谢反馈,我更新了一下,你把 package.json 中 fxd-app-core 的依赖改到 1.0.48 试试。
        我的windows只有一块盘,运行是正常的,但不清楚你之前的情况是否已经解决。

发表回复