跳到主要内容

数据采集

数据采集节点以先定义行、再定义列的结构化方式批量提取数据,是九头虫 RPA 最核心的数据提取节点。


前置知识

使用本节点前,建议了解以下概念:

  • CSS 选择器 — 行选择器和列提取都依赖选择器定位元素,特别是 :self(引用当前行元素本身)等自定义伪类
  • CSS 选择器完全教程 — 零基础入门,含开发者工具操作指南
  • 变量与表达式 — 列数据可引用变量,输出结果也通过变量传递
  • 数据清理管道 — 提取后可对每列数据执行 trimtoNumberformatDate 等清洗操作

概述

数据采集的核心逻辑是两层结构:

行(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.字段}}数组模式的引用变量列行对象的某个属性
:selfCSS 选择器列当前行 DOM 元素自身
:self(.class)CSS 选择器列行元素内部带指定 class 的后代

$item 是一个运行时变量,在列的计算过程中自动注入,无需手动定义。


参数参考

参数类型默认值说明
目标对象下拉选择selectorCSS 选择器 — 从页面 DOM 提取;数组列表 — 从已有数组变量提取
行数据文本必填。选择器模式填 CSS 选择器;数组模式填 {{变量名}}
列名文本字段名称,输出数据的 key
列值来源下拉选择CSS 选择器 / 手动设置 / 引用变量 / 代码块
输出变量文本结果存储的变量名。开启存储时同时作为数据库表名
唯一索引多选所有字段指定去重依据的字段。不设则默认用所有列的值组合去重。基于 SHA256 哈希判断

常见问题

行选择器匹配了元素但列提取为空

现象:行数正确,但每列的值都是空。

原因:列的提取规则未在行元素内部命中,可能列选择器写的是整个页面的而非行内的。

解决:列的提取规则自动限定在行元素内部执行。在开发者工具中先选中一个行元素,再在其内部用选择器验证。

部分数据被跳过没有入库

现象:采集到的数据条数比预期少,部分行没有写入数据库。

原因:默认对所有字段组合去重。如果两行所有字段值都相同,后一行会被跳过。如果指定了唯一索引,则只按指定字段去重。

解决:如果希望按特定字段判断重复(如只按 order_id 去重),在「唯一索引」中选中对应字段;如果不希望去重的影响采集结果,添加一个唯一标识列(如自增序号、当前时间戳等差异值)。

采集到的文本格式混乱

现象:提取的文本前后有空格、换行符,或数字提取出来是字符串。

原因:HTML 中的原始文本保留了格式字符。

解决:使用「数据清理管道」对列数据进行清洗——添加 trim 去空格、toNumber 转数字、stripHTML 去标签等。