工作流实战学习(二):N8N+firecrawl实现自动化爬取

8 阅读12分钟

什么是n8n?

n8n是一款企业级的开源、可视化、高度可扩展的工作流自动化平台。在没有AI工作流这个概念的时候,他们就已经在做工作流自动化的事情了,在AI出来之后,就顺理成章的转变成基于AI的工作流的搭建。

在工作流本身的能力上,以及一些第三方的集成上面,N8N是拥有长时间积累的。所以,在N8N中,AI只是他的能力之一,但是不仅仅局限于AI,所以,他也是很多企业级工作流搭建的首选。

n8n内置超过300+官方节点,支持与主流SaaS工具(如Slack、Google Sheets、Notion、Airtable、Shopify、Discord、Telegram、Zapier Webhooks等)以及数据库(PostgreSQL、MySQL、MongoDB)、消息队列(RabbitMQ、Kafka)和自定义HTTP接口无缝集成。

  • GitHubhttps://github.com/n8n-io/n8n
  • 官网https://n8n.io/ (有一定免费额度)

部署

n8n支持以下2种方式部署:

  • 使用npx
    npx n8n
    
  • 使用docker
    docker volume create n8n_data
    docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
    

部署成功后,可以通过localhost:5678访问。

工作流触发方式

在n8n中,第一步就是配置一个任务的触发方式:

  • Trigger manually(手动触发):通过点击n8n界面中的“运行”按钮来启动流程。最简单直接的方式,适合开发阶段做调试、测试以及临时执行。

  • On app event(应用事件触发):当某个外部应用(如Telegram、Notion、Airtable、Google Sheets等)发生特定事件时自动触发。例如当收到Telegram消息时;当Airtable表格有新行插入时。

  • On a schedule(定时触发):按照设定的时间间隔自动运行流程。支持cron表达式,可灵活设置周期性任务。例如每天凌晨2点运行。

  • On webhook call(Webhook触发):当接收到HTTP请求(POST/GET)时触发流程。可以暴露一个URL,让外部系统“推送”数据进来。也就是可以通过这种方式让把工作流集成到我们的系统中做调用。

  • On form submission(表单提交触发):在n8n内创建Web表单,用户填写并提交后触发流程。这种方式,无需额外前端,快速构建交互式流程。

  • When executed by another workflow(由其他工作流调用):在一个工作流中使用Execute Workflow节点来调用另一个工作流。可以用这种方式实现流程嵌套。

  • On chat message(聊天消息触发):当用户在聊天工具(如Slack、Telegram、Discord)中发送消息时触发。常用于构建AI助手或客服机器人,类似dify的chatflow。

  • Other ways...(其他方式):更多高级触发条件,可通过插件扩展支持更多触发源,比如:

    • 文件变更(如Google Drive新文件上传);
    • 工作流错误时自动重试;
    • 数据库变化监听等。

触发方式的对比

触发方式是否需要外部输入是否适合自动化适用场景
手动触发测试、调试
应用事件集成Notion/Airtable等
定时日报、备份、监控
WebhookAPI对接、事件驱动
表单提交用户输入收集
其他工作流调用模块化流程
聊天消息AI机器人、客服

节点类型

有了触发节点之后,就可以配置后续流程了,我们需要添加node(上图就是一个firecrawl node),n8n把节点分成了几个分类。

  • AI节点:这就是AI相关的节点,就是做模型调用的。

    • 支持与主流大模型(如OpenAI、Claude、Anthropic、Google Gemini等)集成;
    • 可以直接构建一个Ai Agent。
    • 不同的AI模型都提供了不同的能力,可以在对应的节点中选择。
    • AI Agent是一个构建Agent的节点,他把一个agent需要的llm、memory和tool都集成在一起了,可以分别做配置。
  • Action in an app(应用操作节点):连接第三方服务,执行具体操作。

    • 涵盖数百种应用(如Google Drive、Slack、Zapier、Airtable、GitHub、Zoom等);
    • 每个应用通常包含多个子节点,例如:
      • Google Sheets: 创建行、读取数据、更新单元格
      • Telegram: 发送消息、回复用户
      • Notion: 添加页面、查询数据库
  • Data transformation(数据转换节点):对数据进行清洗、格式化和处理。

    • 常见节点包括:
      • Set: 设置变量或字段值
      • Filter: 根据条件筛选数据项
      • Map: 遍历数组并转换每一项
      • JSON: 解析/生成JSON数据
      • Function: 执行JavaScript代码处理数据
      • Split / Merge: 分割或合并数据流
  • Flow(流程控制节点):控制工作流的执行逻辑路径,实现条件判断、循环、分支合并等复杂逻辑。

    • 常见节点:
      • If: 条件判断(类似if-else)
      • Loop: 循环遍历数组(如对每条记录做操作)
      • Wait: 暂停一段时间再继续
      • Merge: 多个分支合并为一条路径
      • Switch: 多条件选择(类似switch-case)
  • Core(核心功能节点):提供底层通用能力。

    • 包含最基础但强大的工具;
    • 常见节点:
      • HTTP Request: 发起任意HTTP请求(GET/POST/PUT等)
      • Code: 执行自定义JavaScript/TypeScript代码
      • Webhook: 接收外部HTTP请求(常作为触发器)
      • Set: 设置变量(也可在Data Transformation中使用)
      • Delay: 延迟执行
  • Human in the loop(人工介入节点):引入人类参与决策过程,在自动化流程中暂停,等待人工确认。

    • 常见节点:
      • Human Review: 显示任务给指定人员审核
      • Approval: 通过邮件或通知请求批准
      • Form: 创建表单让用户填写输入

节点类型的对比

类别主要作用典型节点示例
AIAI能力调用OpenAI Chat, LangChain
Action in an app第三方应用操作Google Sheets, Telegram, Notion
Data transformation数据处理Filter, Map, Set, Function
Flow流程控制If, Loop, Wait, Merge
Core通用功能HTTP Request, Code, Webhook
Human in the loop人工干预Human Review, Approval, Form
Trigger启动流程Webhook, Schedule, Manual

N8N中使用本地模型

n8n目前只支持一些国外的模型,国内模型只支持deepseek,所以我们想要使用开源模型的话,需要自己本地部署,通过ollama的方式支持。

  1. 选择ollama节点
  2. 配置一个ollama账号:
  3. 选择本地已部署的模型 之后就可以用这个本地部署的模型做调用了。
  • GitHub上的n8n模板https://github.com/Zie619/n8n-workflows

试用n8n的云服务并且配置Firecrawl

对于爬取网页这类活动,常见的触发方式包括:定时爬取、接收APP消息后爬取等等,接下来我们就不手动配置了,而是试用 Build with AI chat 方式。

第一步:设定需求以及准备环境

在开始之前,我们首先准备好:

  • Firecrawl API Key以及鉴权参数:前往 Firecrawl 官网注册并获取 API Key,然后准备好 Cookie 以及 User-agent 等参数,见工作流实战学习(一)。
  • Slack 工作区:要在 Slack 网页端获取配置 n8n 所需的 credential,需要先在 Slack 的开发者后台创建一个应用。这个过程分为“创建应用”和“获取凭证”两个主要阶段。

以下是详细的操作步骤:

1. 在 Slack 后台创建应用并设置权限

  1. 访问应用管理页面 前往 Slack API 的应用管理页面:

  2. 创建新应用

    • 点击绿色的 “Create New App” 按钮。
    • 选择 “From scratch”(从零开始)。
    • 输入你的 App Name (例如 n8n-bot),并从下拉菜单中选择你的工作区。
    • 点击 “Create App”

3. 设置 OAuth 权限 (Scopes) 为了让 n8n 能读取和发送消息,你需要为你的应用添加相应权限。 * 在左侧菜单栏,找到 “Features” 部分,点击 “OAuth & Permissions”。 * 向下滚动到 “Scopes” 部分。 * 在 “Bot Token Scopes” 下,点击 “Add an OAuth Scope”。 * 根据你的 n8n 节点需求,添加以下权限: * channels:history - 查看公共频道中的消息 (用于接收消息)。 * channels:read - 查看公共频道列表 (用于选择频道)。 * chat:write - 以机器人身份发送消息 (用于发送结果)。 *

  1. 安装应用到你的工作区

    • 仍在 “OAuth & Permissions” 页面,滚动到最顶部。
    • 点击 “Install to Workspace” 按钮。
    • 在弹出的授权窗口中,点击 “Allow”
  2. 复制 Bot User OAuth Token

    • 安装成功后,页面会刷新。
    • “OAuth Tokens for Your Workspace” 部分,你会看到一个以 xoxb- 开头的令牌。
    • 复制这个令牌。这就是你在 n8n 中配置凭证时需要的 Access Token

2. 在 n8n 中配置 Slack 凭证

现在有了 Token,可以回到 n8n 进行配置了。

  1. 打开你的 n8n 工作流,点击任意一个 Slack 节点(例如 Slack Message ReceivedSend Scraped Results)。
  2. 在节点的 Credential for Slack API 选项中,选择 “Create New Credential”
  3. 在弹出的凭证创建窗口中,将你在上一步复制的 xoxb-... 令牌粘贴到 Access Token 字段。
  4. 点击 “Save”

当然,这里我仍然是直接使用 AI Chat 来配置的,列举出需要配置的项以及值即可。


3. 获取 Channel ID (用于 "Channel to Watch")

Slack Message Received 节点需要一个具体的频道 ID 来监听。

方法一:通过 Slack 网页端直接获取(推荐)

  1. 在 Slack 网页端,进入你想要监听的频道(例如 #general)。
  2. 查看浏览器地址栏的 URL,格式通常是:https://app.slack.com/client/{YOUR-WORKSPACE-ID}/{CHANNEL-ID}
  3. URL 末尾的那串字母和数字就是 Channel ID。复制它。
  4. 回到 n8n 的 Slack Message Received 节点,将复制的 ID 填入 “Channel to Watch” 参数中。

方法二:在 n8n 节点中直接选择Slack Message Received 节点的 “Channel to Watch” 参数中,你可以选择 “Define Later” 或直接在下拉列表中搜索并选择你的频道名称,n8n 会自动帮你处理 ID。但前提是你的 Slack 凭证权限足够。


🚨 Slack 接入避坑

在配置 Slack 触发器时,如果你发现“明明发了消息,但 n8n 死活不触发”,很可能踩了以下坑。我在这里卡了很久,整理出来帮大家注意下:

坑一:忘记配置事件订阅(Event Subscriptions)与“握手报错” 光有 Token 没用,你需要配置 Webhook 告诉 Slack 往哪里发数据。如果在 Slack 后台填 URL 时遇到 challenge parameter 报错,别慌,这是 Slack 的安全机制,要求 n8n 必须秒回一个响应。

  • 配置方法
    1. 在 n8n 复制 Test URL,填入 Slack 后台 Event Subscriptions 的 Request URL 框。
    2. 最关键一步:在 n8n 中点击右上角的 "Listen for event",让 n8n 进入转圈监听状态。
    3. 趁 n8n 还在监听,火速切回 Slack 页面点击报错旁边的 "Retry"
    4. 握手成功(红框变绿)后,往下滚动在 Subscribe to bot events 中添加 message.channels,保存并重新安装应用。

坑二:忘了邀请机器人进频道 机器人默认“看不见”频道消息。必须在 Slack 对应的频道聊天框输入 /invite @你的机器人名字 把它拉进去。


第二步:设定触发器、节点

初次尝试我给了一版不那么规范的提示词(上图中),可以尝试以下这版好那么一点的(越完整越好,这里还有很多需要完善):

首先构建一个 on chat message 的触发器,我希望接入 slack(在这里提供你的 slack 接入 API),然后构建一个 /scrape 的 firecrawl 节点。 当 slack 接收到“帮我抓取小红书热点信息”一类的消息时,firecrawl 开始爬取小红书首页“发现”页面的数据。 对于 scrape 的详细配置包括:

  1. 配置请求: > (1)确定目标 URL:https://www.xiaohongshu.com/explore?channel_id=homefeed_recommend > (2)设置 json 提示词 prompt:优先输出标签中包含关键字“keyword1”,“keyword2”,“keyword3”的作品;
  2. 构造登录授权:这部分需要填充待我从浏览器开发者工具(F12)中获取 Cookie、User-Agent 等属性,之后我们会在网页端通过手机号/二维码登录小红书,所以这些属性值请你后续提醒我们填入;

第三步:工作流测试

引入 Basic LLM Chain

既然 If 节点有局限性,与其去维护一堆死板的关键字(比如穷举“抓取”、“小红书”、“获取”),不如直接加入大模型来识别意图

  1. 在 Slack 节点和 If 节点之间,插入一个 Basic LLM Chain(或 OpenAI 等模型节点)。
  2. 给大模型写个 System Prompt:“你是一个意图识别助手。分析用户的消息,如果用户想要抓取/获取小红书的数据,请严格输出纯 JSON:{"intent": "scrape_xhs"},否则输出 {"intent": "other"}。用户消息是:{{ $json.text }}”。
  3. 极简改造 If 节点:现在不需要一堆复杂的 OR 条件了,只需要判断大模型的输出结果 intent is equal to scrape_xhs 即可。

所有配置

以下列举了n8n work flow中的所有配置:

  • Slack Message Received:

  • Basic LLM Chain 和 Check for Scrape Request:

  • FireCrawl、Format Scraped Data、Send Scraped Results 配置:

测试

执行Excute workflow,然后在slack频道中发消息(保证消息语义能被deepseekV4解析出来),然后等待消息回复即可:

可能是因为某些配置还不够完善,文章的一些标签如作者和时间等还是没能提取,不过url是真实地并且能够规范的对“提取要求”做降级,还是不错的,可能需要换成更开放些的论坛。

总结

本文主要概述了n8n的特性以及在实践中解决了以下问题:

  1. Slack 触发
  2. n8n 传参
  3. Firecrawl 请求
  4. 给出规范提示词(Prompt)
  5. n8n 数据后置过滤与解析

欢迎读者交流心得!