本教程将教你如何使用 n8n 的 HTML 节点轻松提取网页内容。HTML 节点是 n8n 中用于解析和提取 HTML 数据的核心工具,无需编写复杂代码,你就能通过简单的 CSS 选择器从任何网页中提取所需的数据。本教程包含三个主要操作、详细的实战案例,以及一个完整可执行的工作流代码。

HTML 节点是 n8n 内置的核心节点,用于处理 HTML 内容。它替代了旧版本中的"HTML 提取"节点,提供了更强大的功能。简单来说,HTML 节点的作用是:
应用场景:
这是最常用的操作,用来从 HTML 中提取特定的数据。该操作允许你使用 CSS 选择器从 HTML 源中精准定位并提取数据。
配置步骤:
| 参数 | 说明 | 示例 |
|---|---|---|
| 操作 | 选择"提取 HTML 内容" | Extract HTML Content |
| 源数据类型 | JSON 或二进制 | JSON(来自 HTTP 请求) |
| JSON 属性 | 指定包含 HTML 的字段名 | body(通常是 HTTP 返回的 body 字段) |
| 键(Key) | 提取结果的字段名 | title / price |
| CSS 选择器 | 用于定位元素 | .product-name 或 h1 |
| 返回值 | 提取什么内容 | Text(文本)/ HTML / Attribute(属性) |
| 返回数组 | 是否返回数组 | ✅ 启用(提取所有匹配项) |
如何找到正确的 CSS 选择器? 右键点击浏览器中要提取的元素,选择"检查"打开开发者工具。在高亮的 HTML 元素上右键,选择"复制" → "复制选择器",然后粘贴到 n8n 的 CSS 选择器字段。
返回值类型详解:
用于动态生成 HTML 页面或邮件模板。你可以在模板中使用数据表达式,包括标准 HTML 标签、CSS 样式和 JavaScript 代码。
支持的内容:
<style> 标签中)<script> 标签中,但不执行){{}} 包装,调用 n8n 内置方法和变量)简单示例:
<h1>{{$json.title}}</h1>
<p>价格:¥{{$json.price}}</p>
<div style="color: blue;">{{$json.description}}</div>快速将数据转换为格式化的 HTML 表格。该操作不需要配置参数,会自动处理任何来自前置节点的数据。
常用选项:
让我们通过一个真实案例来学习如何使用 HTML 节点提取网页数据。
从网站上自动提取商品列表,包括商品名称、商品价格和商品评分。

手动触发 → HTTP 请求 → HTML 提取 → 数据清理 → JSON 导出第 1 步:添加触发节点 - 添加"手动触发"节点作为工作流的起点
第 2 步:获取网页 HTML - 添加 HTTP 请求 节点,方法选择 GET,输入目标 URL(如 https://scrapeme.live/shop/)。如果遇到 403 错误,添加 User-Agent 请求头:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
第 3 步:提取商品信息 - 添加 HTML 节点,操作选择"提取 HTML 内容",源数据为 JSON,JSON 属性为 body,然后添加提取规则:
| 键 | CSS 选择器 | 返回值 |
|---|---|---|
| name | .product-title | Text |
| price | .product-price | Text |
| rating | .star-rating | Attribute → data-rating |
第 4 步:启用数据数组 - 勾选"返回数组"选项,这样可以提取所有匹配的商品而非仅第一个
第 5 步:清理文本 - 启用"修剪值"移除多余的空格,启用"清理文本"规范化换行符和空格
第 6 步:导出数据 - 添加"转换为文件"节点,格式选择 JSON 或 CSV,执行工作流并下载结果
下面是一个完整的可执行 n8n 工作流,你可以直接导入到你的 n8n 实例中使用:
{
"name": "网页爬虫:商品信息提取",
"nodes": [
{
"parameters": {},
"id": "82e3e47a-7e7e-4bc3-8c5f-7f1c2a3e4f5g",
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [250, 300]
},
{
"parameters": {
"method": "GET",
"url": "https://scrapeme.live/shop/",
"options": {}
},
"id": "a2b3c4d5-e6f7-8a9b-0c1d-2e3f4a5b6c7d",
"name": "HTTP 请求",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [450, 300]
},
{
"parameters": {
"sourceData": "json",
"jsonProperty": "body",
"extractionValues": [
{
"key": "name",
"cssSelectorExtract": "h2 a",
"returnValue": "text",
"regex": ""
},
{
"key": "price",
"cssSelectorExtract": ".price",
"returnValue": "text",
"regex": ""
},
{
"key": "inStock",
"cssSelectorExtract": ".instock",
"returnValue": "text",
"regex": ""
}
],
"returnArray": true,
"trimValues": true,
"cleanUpText": true
},
"id": "b3c4d5e6-f7a8-9b0c-1d2e-3f4a5b6c7d8e",
"name": "HTML 提取",
"type": "n8n-nodes-base.html",
"typeVersion": 1,
"position": [650, 300]
},
{
"parameters": {
"mode": "each",
"expression": "={{ Object.assign({}, $json) }}"
},
"id": "c4d5e6f7-a8b9-0c1d-2e3f-4a5b6c7d8e9f",
"name": "设置字段",
"type": "n8n-nodes-base.set",
"typeVersion": 3.2,
"position": [850, 300]
},
{
"parameters": {
"fileFormat": "json",
"dataIsBase64": false
},
"id": "d5e6f7a8-b9c0-1d2e-3f4a-5b6c7d8e9f0a",
"name": "转换为 JSON 文件",
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1,
"position": [1050, 300]
}
],
"connections": {
"Start": {
"main": [[{"node": "HTTP 请求", "type": "main", "index": 0}]]
},
"HTTP 请求": {
"main": [[{"node": "HTML 提取", "type": "main", "index": 0}]]
},
"HTML 提取": {
"main": [[{"node": "设置字段", "type": "main", "index": 0}]]
},
"设置字段": {
"main": [[{"node": "转换为 JSON 文件", "type": "main", "index": 0}]]
}
},
"active": false,
"settings": {}
}Ctrl+V(或 Cmd+V)粘贴 JSON| 节点 | 功能 | 说明 |
|---|---|---|
| Start | 触发点 | 手动启动工作流 |
| HTTP 请求 | 获取数据 | 向目标 URL 发送 GET 请求,获取原始 HTML |
| HTML 提取 | 解析数据 | 使用 CSS 选择器从 HTML 中提取名称、价格、库存状态 |
| 设置字段 | 数据处理 | 可选的数据转换步骤 |
| 转换为 JSON | 导出数据 | 将提取的数据转换为 JSON 格式并保存 |
CSS 选择器是用来在 HTML 中找到特定元素的语法。常见类型包括:
.classname - 按 class 查找#id - 按 ID 查找tag - 按标签名查找tag.class - 按标签和 class 查找tag > child - 按子元素查找使用 循环 节点配合动态 URL,通过递增 pageNumber 实现分页爬取
添加 User-Agent 请求头使请求看起来像来自真实浏览器。如果 User-Agent 不起作用,考虑使用代理或专门的爬虫 API 服务
如果网页使用 JavaScript 动态加载,使用专门的爬虫 API(如 ScrapeNinja 或 Firecrawl)或浏览器自动化工具
可以!在"提取值"部分点击"添加值",为不同的数据字段添加多个 CSS 选择器规则
如果 CSS 选择器会匹配你不需要的元素,使用"跳过选择器"排除它们。例如提取文本时,可以跳过特定的 HTML 标签
HTTP 请求 → HTML 提取(第一层) → Split Out → HTML 提取(第二层) → 数据清理这样可以处理嵌套的 HTML 结构
使用 If 节点 根据提取结果进行条件判断,例如标记价格低于 100 元的商品为"便宜"
将工作流改为"定时触发"而非"手动触发",实现自动化爬虫
robots.txt 和网站条款,不爬取受保护的数据[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.html/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#