AI PLAY玩法更新持续收录
← 回到更新流

2026-10-03 · 原文发布日

每周自动汇总招聘方官网的在招职位到Airtable

这个n8n模板每周运行:从Airtable读取机构名单,先检查已存的招聘页链接是否有效,失效就用Firecrawl抓官网找到新的招聘页并回写;再抓取页面交给OpenAI提取结构化职位列表,按标题和摘要去重后,把新职位写入Airtable并关联机构、记录状态和发现日期。适合求职跟踪或做职位聚合库的人。

原文要点

原模板每周定时运行:从Airtable读取机构名单,对已存的招聘页链接发请求检查是否返回200;缺失或失效时用Firecrawl抓官网找出疑似招聘页并回写Airtable;再抓招聘页内容交给OpenAI提取结构化职位,按职位标题和摘要与Airtable已有vacancy比对去重;最后把新职位写入Airtable并关联机构、写入状态、截止日期和发现日期。凭据需要Airtable个人访问令牌、Firecrawl API key(以FIRECRAWL_API_KEY环境变量供HTTP请求使用)和OpenAI凭据。

这次做成什么

搭出原模板每周汇总链路的手动触发练习版:在Airtable测试base中验证一条已存招聘页链接、失效时用Firecrawl补抓并回写、用OpenAI提取结构化职位、按标题加摘要与Vacancies查重后写入新职位并关联机构,跑通后再启用每周定时。

准备什么

  • n8n账号(云端或自托管均可)并启用手动触发执行
  • 一个Airtable base,含Organisations与Vacancies两张表
  • Airtable个人访问令牌(仅授予该base读写权限的测试令牌)
  • Firecrawl API key和OpenAI API key(建议用低额度测试key)

具体怎么做

  1. 建Airtable两张表

    在Airtable新建base,Organisations表建字段Organisation Name(单行文本)、Website URL(URL)、Career Page(URL);Vacancies表建Title、Snippet、Status、Deadline、Discovery Date,以及一个Link to Organisations关联字段。先手动录入下文示例CSV中的一行机构数据。

  2. 配三个凭据

    在n8n的Credentials里新建Airtable Personal Access Token凭据粘贴令牌;新建OpenAI凭据;Firecrawl不提供专用节点,按模板要求在环境变量里设置FIRECRAWL_API_KEY,HTTP Request节点通过该变量带Authorization头。自托管时在启动n8n前export该变量。

  3. 搭触发与读取链路

    练习版用Manual Trigger代替每周定时;接一个Airtable节点读取Organisations表全部行;再用HTTP Request节点对每行的Career Page发GET,预期返回200即有效。分支:状态非200或字段为空走Firecrawl路径。

  4. 失效链接的补抓分支

    失效分支用HTTP Request调Firecrawl抓取该机构Website URL的站内链接列表,筛选含career、jobs、join等关键词的候选,取最匹配一条,用Airtable Update节点把新链接写回该机构行的Career Page字段。

  5. 提取职位并去重写入

    对有效招聘页用Firecrawl抓正文,交给OpenAI节点,提示词见下方材料,要求只输出JSON数组。之后用Airtable Search按Title+Snippet在Vacancies表查重,不存在的用Create节点写入,关联机构并填Status=新发现、Discovery Date=当天日期。

可直接复制的材料

OpenAI职位结构化提取提示词(本站编写)

本站独立编写的示例提示词,{{page_content}}需替换为Firecrawl返回的正文变量;字段名需与Vacancies表映射一致。

你是招聘信息提取器。下面是一家机构招聘页的网页正文。请提取所有正在招聘的职位,只输出一个JSON数组,不要输出任何其他文字。每个元素包含:title(职位名称)、location(地点,未知填"未注明")、snippet(不超过60字的职位摘要)、deadline(申请截止日期,格式YYYY-MM-DD,未知填null)、url(职位详情链接,相对链接请用页面域名补全)。如果页面没有任何在招职位,输出[]。网页正文如下:
{{page_content}}

Organisations表测试数据CSV(合成)

本站虚构的合成数据,两条分别覆盖链接有效和缺失两种分支;域名均为示例域,需替换为真实机构。

Organisation Name,Website URL,Career Page
星桥教育科技,https://starbridge-edu.example.com,https://starbridge-edu.example.com/careers
蓝湾数据分析,https://bluebay-data.example.com,

Vacancies表字段映射配置

本站按原文描述整理的映射方案;原模板的具体节点参数需在导入后以模板实际配置为准。

{
  "table": "Vacancies",
  "fields": {
    "Title": "从OpenAI输出的title写入",
    "Snippet": "从OpenAI输出的snippet写入",
    "Status": "固定值:新发现",
    "Deadline": "OpenAI输出的deadline,null则留空",
    "Discovery Date": "当天日期,格式YYYY-MM-DD",
    "Organisation": "关联字段,写入当前Organisations行的记录ID"
  },
  "dedupeKey": ["Title", "Snippet"]
}

输入与输出示例

本站虚构演示,非原作者运行结果;示例域名与职位均为合成。

输入

Organisations表中一行:星桥教育科技,官网https://starbridge-edu.example.com,已存Career Page链接返回404失效;Vacancies表中已有职位“课程运营专员”。

对应输出

Firecrawl在官网抓到新链接https://starbridge-edu.example.com/jobs并回写Career Page;OpenAI从新页面提取出2个职位:[{"title":"课程运营专员","snippet":"负责线上课程排期与学员社群运营"},{"title":"前端开发工程师","snippet":"负责教学平台前端开发与性能优化","deadline":"2026-11-15"}];去重后“课程运营专员”被跳过,仅“前端开发工程师”写入Vacancies,Status=新发现,Discovery Date=2026-10-03,并关联星桥教育科技。

做完检查这些

  • 对失效Career Page链接执行后,Organisations表中该行的Career Page被新链接覆盖更新
  • OpenAI节点输出为合法JSON数组,且无职位时输出[]而不是报错文本
  • 已存在于Vacancies的同名同摘要职位不会重复创建记录
  • 新写入的Vacancies行带有机构关联、Status和Discovery Date三个字段

容易卡住的地方

  • Firecrawl key必须通过FIRECRAWL_API_KEY环境变量注入HTTP请求头,漏设会全部401
  • Firecrawl、OpenAI、Airtable均可能产生按量费用,练习时先用单机构手动触发控制消耗
  • 原模板用OpenAI选定模型,需确认你的账号有该模型权限,否则在节点里换可用模型
  • 网页正文过长可能超出模型上下文,建议在提示词前截断或分段处理

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Track and store open job listings with Firecrawl, OpenAI, and Airtable
原作者
Luka Margiani
原始发布日期
2026-10-02T16:54:51.673Z
来源
https://n8n.io/workflows/20350