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

2026-10-12 · 原文发布日

从网站Impressum页提取并校验公司信息

一个webhook式免费n8n模板:POST传入网址后,工作流抓取首页找到Impressum/imprint页面,把HTML清洗成纯文本交给OpenAI按严格JSON格式提取公司字段,再逐条核对提取值是否真的出现在原文里,丢弃无法验证的字段,最终在响应里返回已验证的公司数据、被丢弃字段和impressum网址。适合德语区客户信息核验、线索补全等场景,公开暴露端点时建议加鉴权。

原文要点

原模板是webhook式免费n8n流程:POST传website,可选organization与reference_id;先校验并规范化URL,阻止private/local地址,非法返回400。抓首页后从链接或嵌入内容找Impressum/imprint,找不到回退/impressum;抓该页转纯文本,无可用内容即停。把清洗文本送OpenAI Chat Completions按严格JSON抽公司字段,再逐字核对抽取值是否真出现在Impressum文本,未验证字段丢弃,响应返回verified数据、dropped_fields与impressum_url;公开端点建议加header鉴权。

这次做成什么

做成一个可复核的德语区公司信息抽取练习:输入一个公开测试站,输出只保留能在页面原文逐字命中的字段,并显式列出被丢字段;不编造模板节点名,不提供导入JSON。

准备什么

  • n8n Cloud或自托管,能开启生产POST webhook
  • OpenAI凭据或兼容提供方,可访问chat completions
  • 一个允许抓取的公开测试网站,无登录与验证码
  • 如公网暴露,准备header鉴权与速率限制

具体怎么做

  1. 入参校验与拒私网

    webhook接收JSON后先解析website,补scheme、去空格;拒绝localhost、127.0.0.0/8、10.0.0.0/8、192.168.0.0/16、172.16.0.0/12与文件协议,非法直接400,避免把内网地址当目标。

  2. 定位Impressum

    抓首页HTML,优先找文本或href含Impressum、imprint的链接;没有则试规范域名的/impressum。抓回后HTML转纯文本,保留换行,若正文低于可用长度则停止并返回no_content。

  3. 严格JSON抽取

    把清洗文本连同下方提示词发给模型,要求只输出JSON对象,不得补全工商知识;字段缺省用null,不改写大小写、标点或法律形式后缀。

  4. 逐字核验再出参

    对非null字符串做大小写不敏感的原文包含检查,地址等多词值需规范化空白后仍逐字命中;未命中进dropped_fields。响应只回verified_company、dropped_fields、impressum_url、reference_id。

可直接复制的材料

Impressum严格抽取提示词

本站编写示例;模型端点与字段名按原HTTP请求节点核对。

从给定德语Impressum纯文本抽取公司信息。只输出一个JSON对象,禁止markdown、禁止解释、禁止推测。键固定为:company_name, legal_form, street, postal_code, city, country, managing_directors, register_court, register_number, vat_id, email, phone。未在文本出现的值用null。必须保留原文拼写、变音符、标点与换行中的词序;managing_directors用数组,其余用字符串或null。不得从组织名参数或常识补全。文本如下:
{{$json.clean_text}}

webhook测试POST体

合成域名;organization只作对照,不得用于补抽取空值。

{
  "website": "https://practice-example.de",
  "organization": "Practice Beispiel GmbH",
  "reference_id": "demo-2026-001"
}

核验规则配置

本站练习阈值;不要把min_clean_text_chars当原文保证。

{
  "min_clean_text_chars": 200,
  "normalize_whitespace": true,
  "case_sensitive": false,
  "require_literal_match": true,
  "drop_if_value_null": false,
  "response_keys": ["verified_company", "dropped_fields", "impressum_url", "reference_id"]
}

输入与输出示例

本站虚构演示;模型把混淆邮箱还原成info@practice-example.de但未在原文逐字命中,故列入dropped_fields;未出现的vat_id与phone保留为null键。

输入

POST{"website":"https://practice-example.de","organization":"Practice Beispiel GmbH","reference_id":"demo-2026-001"},页面文本含“Practice Beispiel GmbH, Musterstraße 12, 10115 Berlin, Geschäftsführer: Ada Beispiel”,页脚另有混淆写法“info [at] practice-example [dot] de”,无电话与VAT号。

对应输出

{"verified_company":{"company_name":"Practice Beispiel GmbH","street":"Musterstraße 12","postal_code":"10115","city":"Berlin","managing_directors":["Ada Beispiel"],"vat_id":null,"phone":null},"dropped_fields":["email"],"impressum_url":"https://practice-example.de/impressum","reference_id":"demo-2026-001"}

做完检查这些

  • 私网或畸形URL返回400且不发起外网抓取
  • 找不到 imprint 时会回退尝试/impressum路径
  • 模型输出非JSON或含解释文本时流程判定失败
  • 任何未逐字命中的值都出现在dropped_fields而非结果里

容易卡住的地方

  • JS渲染页面抓不到正文会被误判no_content
  • HTML清洗丢换行可能拆散地址导致核验失败
  • organization参数会诱导补全,必须只作参考
  • 公网webhook无鉴权会被滥用去抓取或消耗模型额度

原文与作者资料 ↗

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

原文标题
Extract verified company data from website Impressum pages with OpenAI
原作者
Wolfgang Renner
原始发布日期
2026-10-12T08:12:09.196Z
来源
https://n8n.io/workflows/20795