低代码 + AI 驱动:基于 n8n 与 Crawl4AI 的高效自动化爬虫工作流构建(Docker版)


n8n 是一款开源、可视化的自动化工作流引擎,支持低代码方式集成数百种常见服务和应用。用户可以通过拖拽节点的方式快速搭建数据处理、通知推送、系统集成、自动化运维等场景的流程,无需深入编写后端代码。n8n 支持高度的自定义扩展,既适合个人高效自动化,也能满足企业复杂的数据流转与自动化需求。

Crawl4AI 则是一款面向开发者与数据工程师的智能爬虫平台,内置 AI 能力,简化了网页数据采集、结构化提取和自动识别等繁琐环节。通过简单配置或 API 接口,用户即可快速实现大规模网页抓取、动态页面解析等功能,大幅提升数据采集效率。Crawl4AI 既适合自动化集成场景,也适用于需要高质量数据采集的企业级项目。

​ 附上两款工具的github链接:

GitHub - unclecode/crawl4ai: 🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don’t be shy, join here: https://discord.gg/jP8KfhDhyN

GitHub - n8n-io/n8n: Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

​ 截至写稿时间(25.07.31)两款工具在github上分别收获了 125K和50K的⭐。是两款非常强大的现代化工具。

​ 这篇稿子从0开始手把手教会使用这两款工具创建一个工作流帮我们自动来进行一些爬虫任务。

本篇文章基于docker进行服务部署,如访问不了docker或者docker hub,请进行科学上网。

一. docker安装镜像(images)

# 分别安装n8n和Crawl4ai的docker镜像
docker pull docker.n8n.io/n8nio/n8n
docker pull unclecode/crawl4ai:all-amd64

# 注意“all-amd64”是镜像的标签 需要根据自己的电脑芯片选择适合的版本(因为我的电脑是amd64架构,所以选择all-amd64)
# https://hub.docker.com/r/unclecode/crawl4ai/tags 这个链接可以查看不同的版本

该处两条命令是使用docker安装两款工具的镜像,安装完后运行docker image ls 会看到以下两个镜像就是成功。

请添加图片描述

二.为镜像构建一个容器(container)

新建一个文件 docker-compose.txt

version: "3.8" # docker compose版本

services:
  n8n: # 需要启动的服务
    image: docker.n8n.io/n8nio/n8n # 第一步下载好的镜像
    container_name: n8n # 容器的名称
    ports:
      - "5678:5678" # 映射的本地端口  如果本地5678端口被占用了可以更改为你想改的端口
    volumes:
      - 本地一个目录:/home/node/.n8n # 挂载到本地的磁盘卷 做一个映射
    environment:
      - TZ=Asia/Shanghai # 环境变量
    restart: unless-stopped
    networks: # 确保两个服务在同一个网络下
      - mynetwork

  crawl4ai:
    image: unclecode/crawl4ai:all-amd64
    container_name: crawl4ai
    environment:
      - CRAWL4AI_API_TOKEN=test
    ports:
      - "11235:11235"
    restart: unless-stopped
    networks:
      - mynetwork

networks:
  mynetwork: # 需要启动的网络
    driver: bridge

然后重命名为 docker-compose.yml

在这个文件的同级目录打开cmd,运行:

docker-compose up -d # 启动容器 并在后台运行

请添加图片描述

出现这个界面即是成功。

如果想查看容器内服务的运行日志则可以运行:

docker-compose logs -f n8n

结束服务运行:

docker-compose down

注意 这些命令都需要在docker-compose.yml同级目录的cmd下运行。

浏览器输入:localhost:11235 localhost:5678分别是下面的界面则代表成功。
请添加图片描述
请添加图片描述
到这里准备工作就已经做完了,下面开始正式构建工作流。

三.n8n开始构建工作流

工作流整体流程如下:

​用户输入网页的sitemap -> 向目标网站及其子页面发送URL请求 -> 将子页面URL提交至crawl4ai创建爬取任务 -> 等待crawl4ai完成任务执行 -> 将获取的网页内容传递给AI代理进行分析并返回markdown格式数据 -> 将最终数据持久化存储至磁盘

用户输入网页sitemap地址
向目标网站及其子页面发送URL请求
将所有子页面url传给crawl4ai创建爬虫任务
等待crawl4ai完成爬虫任务
获取所有网页内容
网页内容传给AI agent分析
AI agent返回Markdown数据
写入磁盘

3.1 聊天框触发器(chat trigger)

创建工作流按钮:

alt

创建完工作流后
请添加图片描述

第一步需要一个入口用于传输用户想要爬取的网站的内容sitemap,这里选择一个聊天窗口触发器。

3.2 请求(http request)

这里以crawl4ai的官方网站为例:docs.crawl4ai.com/sitemap.xml

很多同学不知道sitemap是什么,这里给大家做一个科普。

sitemap.xml是网站作者给网站做的一个导航,分别列出了该页面及其子页面的url。该处列出的url一般不会违法爬虫协议。

爬虫前请查看爬虫协议,请遵循爬虫协议,合法合规爬虫。

爬虫协议一般位于网页根目录下的robots.txt

请添加图片描述

chatinput拖到URL处点击execute step可以测试是否成功。

3.3 xml转换成json(XML)

请添加图片描述

3.4 分割(split out)

请添加图片描述

将左边的url拖到fields to split out 点击 execute step 。后续都是该流程,点击测试这步后续会省略。

3.5 限制(limit)

请添加图片描述

由于该网页下有52个url 测试阶段可以不爬这么多,限制每次只爬一条,后续放开限制即可。

3.6 循环节点(loop over item)

由于我们在3.5做了一个限制,但是其实一个网站肯定是不止1个url这么简单,所有后续我们放开限制后会有多条url,这里需要添加一个循环来处理多个url的请求情况。

请添加图片描述

到这一步,整体的工作流长这样。
请添加图片描述

3.7 请求(http request)

replace me替换成一个http request,这个http用于将爬虫任务交给crawl4ai生成任务,由工具帮我们进行爬虫任务。

可以打开http://localhost:11235查看具体的用法,该处列举在docker环境下调用api生成爬虫任务。

请添加图片描述
根据文档可以得知这里发送的是post请求,请求头是我们启动docker容器的时候设置的一个api_token,需要带过去的参数有urls priority这两个,其中urls是我们需要爬取的网页的地址,priority取默认的10即可。

所以这里的请求选择post,URL直接填写为http://crawl4ai:11235/crawl即可,由于之前启动容器的时候设置了两个服务的网络处于同一个网络下,所以这里直接用容器的名称代替localhost,如果没有设置同一个网段需要用host.docker.internal代替localhost,直接使用localhost是不能访问到启动的服务的,因为服务是启动在docker容器中,使用localhost只是访问本机的服务。

请添加图片描述

然后选择一个请求头验证(header Auth),填入对应的值。这里是根据api文档填入一个test,这是我们启动docker容器的时候设置的环境的api_token为test
请添加图片描述
请添加图片描述

最后选择发送请求体(send body),测试即可,如图生成了一个task_id即为成功。

请添加图片描述

3.8 等待(wait)

该处需要一个等待时间,防止请求频率过快请求网站得不到数据。

3.9 请求(http request)

根据任务ID执行任务获取爬虫的数据。

文档如下:

请添加图片描述

url按照文档填写,将localhost替换成crawl4ai,仍然是一个header验证。测试如果能成功,则返回了像右边的数据。最终会将所有的html文档获取回来。
请添加图片描述

3.10 判断(if)

判断任务是否执行成功,成功则进行下一步,失败则重试。
请添加图片描述

3.11 处理失败的情况

添加一个set节点,然后添加一个task_id字段,将原本的task_id值填入,返回wait之前即可重新执行任务。

3.12 AI agent

添加一个ai agent,让ai帮我们提取内容,生成文档。
请添加图片描述

Chat Model这里的大模型是必选,其他有条件可以添加如数据库,MCP服务器等。

这里我们选择deep seek的api服务。
请添加图片描述

填入api_key后,会自动测试是否成功,有 test successfully则是成功。
请添加图片描述

最后返回画布,双击AI Agent编写我们的提示词。这里简单写一下提示词,左边有ai工具帮我们整理好的数据,有原生html,有清洗好的cleaned_html,有图片有音频,有链接,我们将cleaned_html拖到提示词中即可。测试后等待api返回内容给我们

请添加图片描述

3.13 内容写入文件(convert to file)

请添加图片描述

添加一个convert to file节点,将内容写入文件,operation选择convert to text file,写入为文本文件,将Agent返回的output拖到input field中,然后指定一下文件名称和编码,这里我们都使用之前生成的task_id作为名称,具有唯一性。如果采集的内容有中文,要指定一下gbk编码。

3.14 文件写入磁盘(write file to disk)

在写入磁盘之前还要进入容器中创建一个data文件夹。如果不想创建这步可以省略,则后面的路径也要相应改变一下。

docker exec -it n8n # 进入容器内部
mkdir data # 创建data目录
chmod -R 777 ./data # 修改目录权限
ls -l # 查看目录详情

请添加图片描述

我们需要把文件的路径指定为这个./data/xxxx.md(个人习惯数据都放在data目录下,文件也是markdown格式。),然后文件名字和字段同样指定为之前的task_id,防止重名。

接下来我们就可以去容器内查看是否成功写入了文件。

cd data # 进入data目录
ls # 查看当前目录下的文件

请添加图片描述请添加图片描述

可以发现已经成功写入了。

3.15 复制文件

由于我们启动容器的时候挂载的路径是D:\workstation\02.work_space\n8n\n8n_data -> /home/node/.n8n,是将本地的D:\workstation\02.work_space\n8n\n8n_data映射到容器中的/home/node/.n8n,所以如果我们想要在本地环境即宿主机(Windows/Linux/Mac)看到文件,还需要将data目录下的文件复制到/home/node/.n8n下面。

添加一个execute command节点,执行复制文件的命令,同样需要在/home/node/.n8n下创建一个data文件夹。

cp ./data/* ./.n8n/data

运行完成后到宿主机查看结果:

请添加图片描述

可以发现已经成功将文件写到宿主机的磁盘中了。
请添加图片描述

有的同学会疑问,为什么不直接写到挂载的目录。因为我的是windows11环境,直接写会报一个权限错误,是docker的一个安全策略引起的。所以新建了一个目录做中转站。

最后整体工作流的内容如下:

请添加图片描述

后续要使用就在limit节点处放开限制即可。

四. n8n集成MCP (Model Context Protocol)

4.1 集成概览

n8n与MCP的集成提供了强大的模型编排能力,允许用户通过可视化工作流将AI模型串联起来。MCP作为模型之间标准化的通信协议,确保不同模型能够无缝交换上下文信息。例如,可以将文本生成模型与图像识别模型结合,创建一个自动生成图片描述的完整流程。

4.2 配置步骤

  1. 安装MCP节点模块

    npm install @mcp/nodes
    

    确保n8n版本在0.198.0以上以支持完整的MCP功能

  2. 认证设置

    • 在n8n凭证管理中添加MCP API密钥
    • 配置端点URL(默认为https://api.mcp.ai/v1
    • 设置请求超时时间(建议30-60秒)
  3. 模型选择

    • 从MCP模型库中选择所需模型
    • 支持按任务类型(NLP、CV等)、性能指标或使用成本筛选
    • 可同时加载多个模型进行级联处理

4.3 最佳实践

截至写稿时间,n8n已经深度集成了多个主流平台的MCP服务,为用户提供了更强大的跨平台自动化能力。

最新版本还新增了对Serverless架构的深度支持,用户可以更便捷地构建基于FaaS的无服务器应用工作流。

这里就不做展示了,希望大家能自行去体验。


### 如何将 crawl4ai n8n 集成 #### 背景介绍 crawl4ai 是一款专注于自动化爬虫工具的软件,而 n8n 则是一个强大的工作流编排平台。两者结合能够实现从数据采集到处理的一体化流程。为了完成这一目标,通常需要通过 HTTP 请求或其他 API 接口来连接两个系统。 #### 安装配置 对于初学者来说,推荐使用云服务本的 n8n 来减少环境配置的工作量[^1]。然而,在某些情况下可能还需要本地部署以满足特定需求。此时可以选择 Docker 或者 npm 进行安装: - **Docker 方式** 如果希望通过容器化的方式简化管理,则可按照如下命令操作: ```bash docker run -d \ --name=n8n \ -p=5678:5678 \ -v /path/to/data:/home/node/.n8n \ -e NODE_ENV="production" \ -e N8N_BASIC_AUTH_ACTIVE=true \ -e N8N_BASIC_AUTH_USER="yourUser" \ -e N8N_BASIC_AUTH_PASSWORD="yourPassword" \ n8nio/n8n ``` - **npm 方式** 对于熟悉 Node.js 开发人员而言,也可以采用全局安装的方法: ```bash npm install n8n -g n8n start ``` #### 实现集成的具体步骤 以下是基于已有的实践案例总结出来的通用解决方案[^2]: 1. **启用 Managed Code Plugin (MCP)** 在启动参数中加入 `-e` 设置 `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true` ,从而激活 MCP 插件支持自定义脚本执行能力[^3]。 2. **创建新节点用于调用外部API** 借助 n8n 内置的 Webhook 或 Function 类型节点发起针对 crawl4ai RESTful APIs 的请求。例如设置 POST 方法向指定 URL 发送 JSON 数据包触发相应的爬取任务。 3. **解析返回结果并继续下游逻辑** 将接收到的数据进一步加工或者存储至数据库等位置作为后续分析依据的一部分内容。 #### 示例代码展示 下面给出一段简单的 Python 函数用来演示如何利用 requests 库访问远程服务器接口获取资源列表信息: ```python import requests def fetch_data(url, params=None): response = requests.get(url=url, params=params) if response.status_code != 200: raise Exception(f'Request failed with status {response.status_code}') data = response.json() return data['items'] ``` 此函数接受一个基础地址以及查询条件字典形式输入变量,并尝试读取响应主体中的 items 键对应的数组值输出给调用方程序单元测试验证其行为正确否即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值