n8n网络爬虫工作流:从知识源创建基于事实的文章 | HTTP Request Webhook自动化
n8n工作流,网络爬虫,HTTP Request,Webhook,数据抓取,自动化,HTML解析,内容提取

## 概述

这个n8n工作流实现了一个功能强大的网络爬虫,能够从给定的URL开始爬取网站页面,最大深度为3层。该工作流获取HTML内容,提取链接和正文文本,对URL进行去重处理,限制在同一域名内爬取,排除PDF等非HTML文件,并通过webhook收集页面数据输出。

## 核心功能

**深度限制爬取**:设置maxDepth参数防止无限循环爬取

**URL去重机制**:使用全局静态数据跟踪已访问和排队中的URL,避免重复抓取

**同站点爬取**:仅跟随初始域名内的链接(包括apex和www变体)

**链接过滤**:忽略mailto、tel、javascript、锚点(#)以及PDF、DOCX等文件类型

**状态管理**:利用n8n的静态数据管理待处理计数、已访问列表、排队字典和跨迭代累积的页面

**批处理和分块**:批量处理链接;按字符限制对收集的内容进行分块以实现高效输出

**错误处理**:Fetch HTML和Queue & Dedup等节点具有onError: continueRegularOutput以跳过失败情况

**输出机制**:将所有页面内容(URL、深度、文本)合并为单个字符串,可选附加额外JSON,并通过webhook响应

## 工作流详细步骤

1. **Webhook**:入口点,接收包含’url’键的JSON负载,在特定路径上触发POST请求

2. **Init Crawl Params(Set节点)**:处理输入,从body.url设置’url’和’domain’,maxDepth=3,depth=0,仅保留这些字段

3. **Init Globals(Code节点)**:初始化全局静态数据:pending=1,visited=[],queued={},pages=[],从URL规范化域名,处理无URL()的异常情况

4. **Seed Root Crawl Item(Merge节点)**:将初始参数与全局输出合并,模式:按位置组合,冲突时优先最后,包含未配对项

5. **Fetch HTML Page(HTTP Request节点)**:GET当前URL,超时5秒,出错时继续,输出原始HTML正文

6. **Attach URL/Depth to HTML(Code节点)**:将URL和深度从种子附加到HTML响应项

7. **Extract Body & Links(HTML节点)**:操作:extractHtmlContent,从body选择器获取’content’(修剪、清理),从a[href]获取’href’属性数组作为’links’

8. **Queue & Dedup Links(Code节点)**:核心逻辑,规范化URL(绝对路径,无尾随/),提取忽略www/协议/路径的主机,标记当前为已访问,出队,过滤链接:同站点、未访问、未排队、深度<最大值,使用depth+1排队新链接,减少待处理计数,添加新项到待处理,输出新链接项+带内容的当前页面项

9. **IF Crawl Depth OK?(IF节点)**:检查type='link'且depth<=maxDepth,True:重新排队抓取,False:存储页面

10. **Requeue Link Item(Code节点)**:移除'type'字段,返回项以循环回抓取

11. **Loop Links(Batches)(SplitInBatches节点)**:批量大小1,不重置,逐个遍历排队链接,反馈到Seed Root Crawl Item进行下一次抓取

12. **Store Page Data(Set节点)**:保留页面项的url、content、depth

13. **Collect Pages & Emit When Done(Code节点)**:将页面附加到全局pages[],如果pending<=0,发出组合内容字符串(每页URL/深度/内容,分隔),否则空输出

14. **Merge Web Pages(Merge节点)**:将循环中收集的页面与初始全局数据合并

15. **Combine & Chunk(Code节点)**:合并存储/传入页面,规范化,附加额外JSON(如果存在),构建完整combinedContent,按最大字符数(12000)然后5个子组对页面进行分块,输出带索引、页面子集、完整combinedContent、accId的批处理项

16. **Respond to Webhook(RespondToWebhook节点)**:发送分块输出作为响应

## 技术特点

**循环机制**:使用SplitInBatches迭代队列,反馈到合并进行递归爬取

**终止条件**:待处理计数器确保仅在所有页面处理完成(无更多队列)时发出

**限制**:无外部域名,基本链接清理,假设HTTP/HTTPS,无身份验证/cookies

**使用方法**:通过webhook触发{"url": "https://example.com"},输出:带批处理页面数据的JSON

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。