数据采集
数据采集节点以先定义行、再定义列的结构化方式批量提取数据,是九头虫 RPA 最核心的数据提取节点。
前置知识
使用本节点前,建议了解以下概念:
- CSS 选择器 — 行选择器和列提取都依赖选择器定位元素,特别是
:self(引用当前行元素本身)等自定义伪类 - CSS 选择器完全教程 — 零基础入门,含开发者工具操作指南
- 变量与表达式 — 列数据可引用变量,输出结果也通过变量传递
- 数据清理管道 — 提取后可对每列数据执行
trim、toNumber、formatDate等清洗操作
概述
数据采集的核心逻辑是两层结构:
行(Rows)→ 定义"在哪里找",一组容器元素或一个数组
列(Cols)→ 定义"提取什么",在每行内部提取具体字段
行:可以是 CSS 选择器匹配的一组容器元素(如商品卡片 <div>、表格行 <tr>),也可以是一个已有的数组变量。每一行对应一条最终数据记录。
列:在每行内部,定义要提取的字段。每列有独立的名称和值来源。
提取结果可以输出为变量供下游使用,也可以存入数据库,多节点可合并到同一张表。
使用方法
步骤 1:选择目标对象
决定数据从哪来——「CSS 选择器」从页面 DOM 提取,「数组列表」从已有变量提取。
步骤 2:定义行
- CSS 选择器模式:填写容器元素选择器。例如商品列表页填
.product-item,表格填table.order-table tbody tr。节点执行时会查询所有匹配元素,每匹配到一个就是一行。 - 数组列表模式:填写
{{变量名}}引用已有数组。数组中每个元素作为一行。
步骤 3:添加列
点击「新增列」为每行定义要提取的字段。每列包含:
- 列名:字段名称,输出结果中对应字段的 key
- 值来源:决定该列的值如何获取,支持四种来源
列的四种值来源
CSS 选择器(仅 CSS 选择器模式可用)
从行元素内部查询子元素。列的提取范围自动限定在当前行元素内——写 .title 找的是行元素内部的 .title,不会从整个页面找。这是最高效的来源,批量 DOM 查询在底层一次性完成。
手动设置
固定值,每行都一样。适合添加常量标记字段,如 "source": "web"。
引用变量
从其他变量中取值,支持 {{$item}} 引用当前行数据,支持数据清理管道对值做链式清洗。
{{$item}} → 当前行元素自身的文本内容
{{$item.name}} → 行对象(数组模式)的 name 属性
{{userConfig.status}} → 引用其他上游变量
代码块
编写 JavaScript 代码,返回值作为该列的值。代码中可通过 $item 访问当前行数据:
// $item 是当前行对象
return $item.price * $item.quantity;
步骤 4:配置输出
- 不开启存储:结果仅输出为变量,供下游节点通过
{{变量名}}引用 - 开启存储:结果同时写入数据库。设置「输出变量」(即表名)。默认对所有字段组合去重,可通过「唯一索引」指定只按部分字段去重。底层通过 SHA256 哈希判断
指定唯一索引
开启存储后,「唯一索引」为多选下拉框,列出所有已定义的列名。勾选一个或多个字段作为去重依据:
- 不勾选任何字段:默认对所有列的值组合做 SHA256 哈希,完全相同的行视为重复,只保留第一条
- 勾选部分字段:只对勾选的字段组合做哈希去重。例如勾选
order_id,则相同订单号的数据只保留一条,即使其他字段(如价格、状态)不同也会被跳过
示例:采集了 5 列 — id, name, price, status, time
不勾选唯一索引 → 5 列值完全相同的行视为重复
勾选 id → id 相同的行视为重复(后出现的跳过)
勾选 id, status → id 和 status 都相同的行视为重复
如果不希望任何去重,可以添加一个每行都不同的列(如当前时间戳或自增序号),并设为唯一索引。这样每行的哈希都不一样,不会有数据被跳过。
$item 与 :self
两者用于在列规则中引用"当前行",区别在于使用位置:
| 用法 | 适用场景 | 含义 |
|---|---|---|
{{$item}} | 引用变量、代码块列 | 当前行数据对象 |
{{$item.字段}} | 数组模式的引用变量列 | 行对象的某个属性 |
:self | CSS 选择器列 | 当前行 DOM 元素自身 |
:self(.class) | CSS 选择器列 | 行元素内部带指定 class 的后代 |
$item是一个运行时变量,在列的计算过程中自动注入,无需手动定义。
参数参考
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| 目标对象 | 下拉选择 | selector | CSS 选择器 — 从页面 DOM 提取;数组列表 — 从已有数组变量提取 |
| 行数据 | 文本 | — | 必填。选择器模式填 CSS 选择器;数组模式填 {{变量名}} |
| 列名 | 文本 | — | 字段名称,输出数据的 key |
| 列值来源 | 下拉选择 | — | CSS 选择器 / 手动设置 / 引用变量 / 代码块 |
| 输出变量 | 文本 | — | 结果存储的变量名。开启存储时同时作为数据库表名 |
| 唯一索引 | 多选 | 所有字段 | 指定去重依据的字段。不设则默认用所有列的值组合去重。基于 SHA256 哈希判断 |
常见问题
行选择器匹配了元素但列提取为空
现象:行数正确,但每列的值都是空。
原因:列的提取规则未在行元素内部命中,可能列选择器写的是整个页面的而非行内的。
解决:列的提取规则自动限定在行元素内部执行。在开发者工具中先选中一个行元素,再在其内部用选择器验证。
部分数据被跳过没有入库
现象:采集到的数据条数比预期少,部分行没有写入数据库。
原因:默认对所有字段组合去重。如果两行所有字段值都相同,后一行会被跳过。如果指定了唯一索引,则只按指定字段去重。
解决:如果希望按特定字段判断重复(如只按 order_id 去重),在「唯一索引」中选中对应字段;如果不希望去重的影响采集结果,添加一个唯一标识列(如自增序号、当前时间戳等差异值)。
采集到的文本格式混乱
现象:提取的文本前后有空格、换行符,或数字提取出来是字符串。
原因:HTML 中的原始文本保留了格式字符。
解决:使用「数据清理管道」对列数据进行清洗——添加 trim 去空格、toNumber 转数字、stripHTML 去标签等。