
Ethan Collins
Pattern Recognition Specialist

只有当记录在司法管辖区之间是当前的、可追溯的和标准化的时,公司注册数据提取对AI尽职调查才有用。最佳架构是API优先:查询官方注册表,保留源响应,将字段映射到共享的公司模式,并且在没有合适的API或导出时才使用浏览器自动化。验证码挑战可能会中断公共门户工作流,但应通过可审计的恢复层处理,该层具有严格的授权、速率限制和数据最小化控制。本指南展示了如何构建该管道,包括源选择、身份解析、结构化Python示例、证据存储、变更监控和安全的CapSolver集成。结果支持供应商入驻、交易对手筛选、投资组合监控和研究代理,而不会让模型做出未经证实的法律或风险判断。
有用记录不仅仅是公司名称。它需要足够的稳定标识符和来源,以区分类似名称的实体并解释每个结论。
from dataclasses import dataclass, field
from datetime import datetime
@dataclass
class CompanyRecord:
jurisdiction: str
registry_company_id: str
legal_name: str
previous_names: list[str] = field(default_factory=list)
company_status: str | None = None
incorporation_date: str | None = None
legal_form: str | None = None
registered_address: dict | None = None
officers: list[dict] = field(default_factory=list)
filing_history: list[dict] = field(default_factory=list)
industry_codes: list[str] = field(default_factory=list)
source_url: str | None = None
collected_at: str = field(default_factory=lambda: datetime.utcnow().isoformat())
核心字段因司法管辖区而异,但记录应始终保留官方公司标识符、来源司法管辖区、来源URL和收集时间戳。CapSolver网络爬虫常见问题提供了可靠公共数据收集的一般指导,而CapSolver自动化博客涵盖了工作流设计。
官方API提供稳定的模式、更清晰的许可和可预测的速率限制。例如,英国公司注册局API提供实时公司信息,而< a href="https://www.sec.gov/search-filings/edgar-application-programming-interfaces" rel="nofollow">SEC EDGAR API暴露美国文件和提交数据。 欧盟e-Justice企业注册门户描述了通过BRIS进行跨境注册访问。
| 源路径 | 最佳用途 | 主要优势 | 主要限制 |
|---|---|---|---|
| 官方REST API | 重复验证和监控 | 稳定的结构化数据 | 认证和速率限制 |
| 官方批量数据集 | 投资组合规模分析 | 高效的高体积处理 | 可能不是实时的 |
| 公共注册门户 | 一次性或不支持的字段 | 人类可读的源证据 | 会话控制和验证码挑战 |
| 许可聚合器 | 多司法管辖区覆盖 | 标准化模式 | 成本和许可限制 |
可辩护的AI尽职调查工作流记录每个字段的源路径。它永远不应该在没有来源的情况下静默合并聚合器值与官方记录。
以下API优先示例使用记录的公司注册局公司资料端点。将API密钥存储在提示和源代码之外。
import os
import requests
COMPANIES_HOUSE_KEY = os.environ["COMPANIES_HOUSE_API_KEY"]
def fetch_uk_company(company_number: str) -> dict:
url = (
"https://api.company-information.service.gov.uk/"
f"company/{company_number}"
)
response = requests.get(
url,
auth=(COMPANIES_HOUSE_KEY, ""),
timeout=30,
headers={"Accept": "application/json"},
)
response.raise_for_status()
raw = response.json()
return {
"jurisdiction": "GB",
"registry_company_id": raw["company_number"],
"legal_name": raw["company_name"],
"company_status": raw.get("company_status"),
"incorporation_date": raw.get("date_of_creation"),
"legal_form": raw.get("type"),
"registered_address": raw.get("registered_office_address"),
"industry_codes": raw.get("sic_codes", []),
"source_url": url,
}
仅在必要时使用记录的端点获取高管、文件历史、破产和主要控制人字段。默认情况下不要收集完整资料。 公司注册局注册指南解释了公共注册和搜索政策。
注册术语各不相同。一个来源可能使用“active”,另一个使用“registered”,另一个使用司法管辖区特定的标签。保留原始值并将其映射到小的标准化词汇表。
STATUS_MAP = {
"active": "active",
"registered": "active",
"dissolved": "inactive",
"liquidation": "distress",
"administration": "distress",
"converted-closed": "inactive",
}
def normalize_status(raw_status: str | None) -> dict:
raw = (raw_status or "unknown").strip().lower()
return {
"raw_status": raw_status,
"normalized_status": STATUS_MAP.get(raw, "other"),
}
标准化不应丢弃源标签。AI代理需要原始证据来解释不确定性并适应注册术语的变化。
CapSolver Python爬虫指南提供了实用的收集模式,CapSolver术语表帮助团队标准化自动化术语。
仅凭名称不可靠。通过加权稳定标识符和验证属性来解析实体。
from difflib import SequenceMatcher
def entity_match_score(query: dict, candidate: dict) -> float:
score = 0.0
if query.get("registry_company_id") == candidate.get("registry_company_id"):
score += 0.60
name_a = (query.get("legal_name") or "").lower()
name_b = (candidate.get("legal_name") or "").lower()
score += 0.25 * SequenceMatcher(None, name_a, name_b).ratio()
if query.get("postal_code") and (
query["postal_code"] == candidate.get("postal_code")
):
score += 0.15
return round(min(score, 1.0), 3)
在保守的置信度阈值以下需要人工审核。AI代理应总结匹配证据,而不是仅仅因为名称相似就声明两个实体相同。
一些注册表仅通过公共门户暴露字段,或在多次搜索后添加流量验证。仅在条款允许自动化且组织已批准工作流时使用浏览器回退。
用户提供的CapSolver代理文档将solve_on_page映射到核心浏览器方法。因此,受控的Playwright恢复步骤可以保持在模型的自由推理之外:
from capsolver_core import Capsolver
cap = Capsolver(api_key=os.environ["CAPSOLVER_API_KEY"])
async def recover_authorized_registry_page(page):
detected = await cap.detect(page)
if not detected:
return {"solved": False, "reason": "未检测到支持的挑战"}
result = await cap.solve_on_page(page)
return {
"solved": True,
"result": result,
}
保持浏览器在同一会话中并应用有限重试规则。CapSolver验证码解决常见问题解释了通用生命周期,CapSolver关于网络爬虫期间验证码处理的文章讨论了实际恢复模式。
附加代码:在CapSolver仪表板上使用代码WEBS可获得每次充值额外5%的奖金。
AI代理应接收证据包,而不是无限制的原始页面。包括标准化字段、源快照或哈希、时间戳和明确的数据质量警告。
import hashlib
import json
from datetime import datetime, timezone
def build_evidence_package(record: dict, raw_response: dict) -> dict:
raw_json = json.dumps(raw_response, sort_keys=True).encode("utf-8")
return {
"record": record,
"provenance": {
"source_url": record["source_url"],
"collected_at": datetime.now(timezone.utc).isoformat(),
"raw_sha256": hashlib.sha256(raw_json).hexdigest(),
},
"warnings": [
"注册信息可能由公司提交,可能需要独立验证。",
"在人工审核之前不应做出任何法律或投资结论。",
],
}
这一点尤其重要,因为注册表发布事实并不证明该事实是当前的、完整的或独立验证的。AI输出应区分“注册表报告”和“尽职调查确认”。
在存在官方webhook或流产品时使用事件驱动检查。否则,计算标准化字段的哈希并在基于风险的计划中重新获取。
MONITORING_INTERVALS = {
"high_risk_counterparty": "daily",
"active_vendor": "weekly",
"prospect": "monthly",
"archived_relationship": "quarterly",
}
跟踪有意义的变更,如公司状态、注册办公室、董事、受益所有权文件、逾期账目和破产指标。避免因仅格式更改而生成警报。
公司注册数据提取必须尊重源许可、使用条款、隐私法和目的限制。即使公共注册表也可能包含高管或受益所有人的个人信息。仅收集经批准的尽职调查流程所需的内容,执行保留期限,并限制下游模型访问。
英国信息专员办公室数据保护原则为合法性、最小化、准确性、存储限制和安全性提供了有用的框架。
公司注册数据提取用于AI尽职调查的最佳方式是作为以来源优先的数据管道。尽可能使用官方API和批量数据集,标准化而不删除原始值,保守地解析实体,并向模型提供证据而非未经检查的结论。当授权的公共注册门户呈现支持的验证码挑战时,CapSolver可以作为狭窄控制的恢复层,而无需更改管道的其余部分。
在暂存工作流中测试CapSolver,然后在生产使用前添加源许可、隐私审查、速率限制和人工批准。
不。可用性因司法管辖区、记录类型和访问政策而异。一些注册表发布基本公司信息,但限制个人、受益所有权、历史或文档数据。
首先使用官方API或批量数据集。浏览器自动化应作为结构化访问不可用的允许字段的回退。
代理可以总结证据并标记不一致之处,但重大法律、合规、贷款、采购或投资决策应继续接受验证规则和合格人工审核。
使用基于风险的计划。高风险交易对手可能需要每日检查,而低风险或不活跃的关系可能需要每月或每季度更新。
当授权的公共门户呈现支持的挑战时,CapSolver才相关。它不应取代官方API、权限、身份控制或合规审查。