参考

数据

数据集是一张归工作区所有的表格:你命名并指定了类型的列,以及列下面的行。它存在于工作区里,而不是某一台机器上,所以同事打开的是和你一样的那张表,而今晚运行的自动化流程写入的,正是你今天早上在看的那一张。

本页内容

一张归工作区所有的表格

数据集不是这台机器上的一个文件。它属于工作区,这正是往里放结果才值得的原因:同事打开的就是你打开的那张表,而凌晨三点跑完的那次运行,写进去的就是你昨天在读的那一张。要做到这一点,不需要把任何东西发到别处。

数据标签页列着六个数据集,每一行显示名称、行数与列数、标签、哪些自动化流程在用它、谁建的,以及什么时候改过。列表上方是搜索框、新建数据集和导入文件,还有「全部数据集」「回收站」「新建文件夹」几个标签块。
工作区的数据集,以及是什么在填满它们:「被谁使用」那一列写出了正往里写数据的自动化流程。

列带着类型,而表格严格照类型办事:文本与长文本、数字、复选框、日期与日期时间、URL、邮箱、电话、带彩色选项的单选,以及标签。行号和创建时间是算出来的,不是存下来的,所以没有什么需要你手工去对齐。

另有三种装的不是值,而是工作区里的一个对象——一个环境、一个自动化流程或一个代理——它们存的是对象的 id,所以就算有人改了名字,单元格指向的仍然是同一个东西。列还可以装一个自动化参数,表格正是这样喂给读它的那条工作流的。

列表变长以后可以用文件夹归类数据集,而删掉的那个会先在回收站里等着,不会直接消失。

被删除的数据集会在回收站里等三十天,然后被彻底清除。可以从那里把它恢复回来,也可以自己清空回收站,如果你不想等的话。

列和它们的类型

每一列都有类型,而表格严格照类型办事:单元格里出现哪种编辑器、这一列怎么排序、一个值要长成什么样才会被接受,都由它决定。可选的类型共 17 种:

文本text
长文本longText
数字number
按真正的数字存储,所以排序和区间都是数值型的。
复选框checkbox
日期date
按 YYYY-MM-DD 存储。
日期与时间datetime
按完整的 UTC 时间戳存储。
URLurl
邮箱email
电话phone
状态(单选)select
每行一个彩色标签,取自你定义的列表。
标签(多选)tags
每行可以有任意多个标签,取自你定义的列表。
创建时间createdAt
从行本身读出。不可编辑。
行号rowNumber
该行在本页中的位置。不可编辑。
自动化参数parameter
存放形如 {{vars.email}} 的引用,交给自动化流程去解析。
环境profile
存放工作区里的某一个环境;单元格从列表中挑选。
自动化流程automation
存放工作区里的某一个自动化流程,从列表中挑选。
代理proxy
存放工作区里的某一个代理,从列表中挑选。

创建时间和行号是算出来的,不是存下来的——它们从行本身读出,所以既没有什么要手工保持一致,也没有什么可编辑。

打开的一个数据集:十行数据,列都有类型——环境名、Cookie、代理类型、user agent、备注和状态;每个列头都带着自己的类型图标,状态列渲染出彩色的「通过」「错误」「等待中」几个选项。上方工具栏提供导出、导入文件、重命名和删除,最后一行下面还有一个新增行的控件。
打开的数据集。每一列都有类型和自己的编辑器,行则按写入顺序直接从数据库分页取出。

自动化参数值得停下来说一说。这类列的单元格装的不是值,而是一个引用——{{vars.email}},和自动化流程写出来的一模一样——而编辑器会把工作区里任何自动化流程声明过的每一个参数都列给你,所以你是在一份真实的清单里挑,而不是凭记忆敲个名字碰运气。这正是「记录发生过什么的数据集」和「本身就是任务清单的数据集」之间的差别:loadRows 步骤把这一列读回来,每一行就成为明天那次运行其中一轮的输入。

行是怎么进来的

大多数行是自己进来的。最短的路径是「采集器」标签页:挑一个现成的采集器,填好它的表单,它的行就会落进一张属于它自己的新表——不会打开浏览器窗口,也不占用自动化流程的名额。另一条路、也是通用的那条,是跑在某个环境上的自动化流程:它把提取到的内容直接写进数据集,而保存行与加载行这两个步骤让一个流程可以把一张表交给下一个——今天采集,明天行动。运行采集器这一步把两者接在一起,从工作流内部跑一个采集器;而且它是唯一能把结果归入你指定的那张表、而不是每次都新建一张的路径,所以按日程执行的采集会把一张表越养越大,而不是每晚都留下一张新的。

采集器把行写进哪张表,只有 runScraper 这一步能决定。从「采集器」标签页、从助手或经 API 发起的采集,永远会新开一张属于自己的表,用搜索词和分钟命名。而这个步骤可以指定一张表,把每次运行都归进去——表还不存在时按该采集器的列建出来,之后就往里追加,或者按你指定的匹配列就地更新。这样一来,夜里的采集养大的是一张你周一可以直接打开的表,而不是七张。

「导入文件」接受 CSV、JSON、TXT 或 XLSX,既可以按文件自带的表头新建一个数据集,也可以追加进一个已有的数据集,并把文件带来的列合并进去。

数据标签页之上的导入文件对话框:一个 CSV 文件,标着它的行数和列数,一个「首行是列名」的复选框,一张前几行的预览表格,以及两个选择——新建数据集,它从空表开始并收下文件的每一行;或者已有数据集,行会被追加进去,新列则并入原有结构。
先预览文件,再做导入真正打开的那个选择:照文件自己的表头建一个数据集,还是追加进一个已经存在的。

导入只问一个问题,而且问得很实在。「新建数据集」从空表开始,接收文件的每一行,列取自文件自己的表头行。「已有数据集」则追加进你已经有的那张表,文件带来的、表里没有的列会合并进去,而不是被丢掉。

助手是第四条路,而且常常是最快的一条。按名字向它要一张表,它就能读行、筛选和计数、新增或修正,或者清掉重复。任何批量或有破坏性的操作都会在执行前弹出一张确认卡片,所以一个结果涉及四千行的请求,会先来问你。

处理这些行

点一下单元格就能就地编辑;每种列类型都带自己的编辑器。行和列可以直接在表格里添加,可以筛选和排序,勾选若干行就能批量删除,表格比窗口宽的时候还能冻结第一列。导出会把整张表给你,CSV 或 JSON 都行。

行是按插入顺序直接从数据库分页取出的,所以你看到的是数据集本身,而不是它的某一页在假装自己排过序。五万行的表和五十行的表打开得一样快。

筛选和排序出于同样的理由发生在服务端,作用于整张表,而不是你眼前这一页。第三次点击列头会清掉排序,把表交还给它存储时的顺序——这也正是那个顺序值得拥有的原因:它是唯一一种永远是这个数据集之实情的排列。

上限,因为这类数字值得在你依赖它们之前就知道:一个数据集十万行,一个工作区两百个数据集,一张表六十列,任何单独一行 64 KiB。

内置的写入目标

你的数据集是数据库步骤可以写入的目标之一。saveRowsloadRows 指向你自己的表,和它们指向 Supabase、Google Sheet 或磁盘上的 CSV 是一样的——你选 Argus Datasets,再写上表名。没有凭据要保存,也没有什么要连接,因为它本来就是你的工作区。

有两件事是它的大多数邻居做不到的。它能按过滤条件 upsert:给 saveRows 一个用来匹配的列,凡是值匹配上的行都会被合并覆盖,既不需要也不暗示任何唯一约束。而映射过来却找不到对应列的键,是一次新增而不是一个错误,所以某次运行开始多返回一个字段时,它不会失败——换成 Supabase 就会被拒绝,因为在那边加一列是对数据库的结构变更,而 Argus 在那个数据库里只是客人。

它永远不会是默认的写入目标,这是刻意的。saveRows 步骤必须显式指定它,所以你针对自己数据库写的东西,不会悄悄改去填一个数据集。其余目标的完整清单在「数据库与文件」

数据集在本地 API 上,整个标签页都能从那里够到:新建数据集、替换它声明的列、追加行、按 id 重写或删除行、带过滤与聚合地查询,以及让它进出回收站。这里的每一项都同样配有 Agent 工具,所以应用内的助手和你自己的代码是用同一种方式操作同一张表的。读取是分页的,不是整包倾倒——一次查询只扫描有界的一段,并在数据集比这更大时告诉你,所以部分答案永远不会被当成全部真相递出去。

不开浏览器读一个页面

reach 步骤在不打开页面的情况下把它取回来。它会从 URL 判断走哪个通道,你也可以自己指定:

autowebyoutuberedditrss

YouTube、Reddit 和 RSS 返回结构化的行——每个视频、帖子或条目一行——而 web 把页面作为 markdown 返回。答案落进你指定的变量里,再由一个设成「每个条目写一行」的 saveRows 步骤把它变成一张表。两步,不用浏览器,不用环境。

reach 取回的一切都走启动器自己的连接——不走环境的代理,也不带它的 Cookie。这正是它又快又省的原因,也同样是它的边界:需要登录才能看的页面得用真正的浏览器步骤,以那个已登录的身份去跑。

reach 和其他数据步骤一起放在「读取与保存数据」,紧挨着那两个把行搬进搬出的步骤。

给结果一个落脚的地方

「数据」标签页在启动器里。数据集只有在有东西不断往里填的时候才最有价值,所以通常先做自动化流程——日历排在它后面。