返回知识中心
部署

招聘信息抓取:标题、重复发布与关闭判断

构建跨招聘站点的入库记录:同时保留原始与规范化字段,区分重复发布,并把缺失视为观察结果,而不是关闭。

BotBrowser Team

文档中心

想直接进入 部署 文档吗?

这篇文章属于知识中心的指南库。若你要步骤化配置、参考说明和持续更新,请直接进入对应 docs 分区。

当多个招聘站点发布同一职位时,招聘信息抓取首先是一个数据模型问题。相同标题不能确定是同一职位,新 URL 不能证明是新空缺,记录不再出现也不能证明雇主已关闭该职位。BotBrowser 为获准观察提供有文档说明的配置文件浏览器参数;它不提供招聘数据、不代为登录,也不授予招聘站点访问权限。选择获准来源,在规范化值旁保留原始字段,并明确记录每条发布实例和观察结果。

构造记录同时保留原始与规范化字段,将重复发布与原始记录分开,把刷新失败记为采集事件,并在目标从有限列表缺席时保持关闭状态未确立。

摘要

  • 在规范化值旁保留标题、雇主和地点的原始字符串,并记录规则版本。
  • 以来源中的发布实例作为记录键。重复发布在替换旧实例前,必须有来源提供的连续性证据。
  • 将 datePosted、validThrough 和观察时间视为含义不同的独立事实。
  • 刷新失败是采集事件。有限列表中的缺席只是缺席,不能证明职位已关闭。
  • 有官方数据源或获准导出时优先使用。词汇表和结构化数据资格不等于采集授权。

目录

分开三类规范化问题

跨站点招聘数据需要三种不同决策。把它们合并成一次清洗,会丢失以后核对所需的证据。

标题。 “Senior Engineer”“Sr. Engineer, Platform”和“Engineer III”可能表示相近资历,也可能表示不同范围。为已声明的用途建立独立字段,例如粗粒度职位族,同时保留来源标题。不要用规范化标签覆盖原标题。

地点。 “Remote”“Remote, US”“New York, NY (Hybrid)”以及自由文本中的城市名回答不同问题。保留原始地点文本,再记录来源实际提供的字段:国家、地区、城市、远程范围和办公方式。国家缺失时,不能根据浏览器语言或代理地区推断。

雇主。 品牌、法律实体、招聘机构和站点自定义雇主标签并不等价。保留来源标签及任何来源提供的组织引用。相似名称可能属于不同实体,一个雇主也可能通过多个渠道发布。

将三项映射决策记录为独立字段,例如 title_family、location_parts 和 employer_ref,各自带规则版本。单一的 cleaned_title 或 city 会隐藏哪些部分来自来源、哪些是推断。把原始字符串保存在这些字段旁,并在来源没有回答时保留明确的未知状态。这样后续比较无需重建原始响应也能复核。

招聘字段合同规定单个站点如何提供字段与观察。本流程从该来源合同之后开始,增加一条跨站点记录,并明确显示做了哪些映射。

保留原始字段与规则版本

规范化是应用决策,因此记录必须同时显示输入和转换规则。schema.org JobPosting 词汇表描述招聘职位的公告,并把 datePosted 定义为在线公告的发布日期。它提供可比较的含义,不是每个站点的通用解析器。

记录字段保留内容边界
来源站点或数据源身份及数据集范围不同来源的相同值不自动代表同一发布
发布键实际提供的提供方标识符URL 或标题不自动是稳定发布键
原始标题许可保留范围内的精确来源字符串不要用规范化标签替换
原始地点精确文本及提供的结构化部分不根据区域设置或代理推断缺失国家
雇主标签来源提供的雇主或组织文本未经证据,品牌、法律实体与机构保持区分
规范化字段值、规则标识和映射版本规则变化产生新解释,不是静默重写
发布与到期来源提供的 datePosted 和 validThrough二者都不能确定实际填补日期或已确认关闭
观察采集时间、来源状态和接受结果采集时间不是发布时间、到期时间或交易时间

Google JobPosting 文档描述可让职位公告进入招聘搜索体验的结构化数据,并给出 identifier、datePosted、validThrough、employmentType、hiringOrganization 和 jobLocation 等示例字段。获得资格不保证准确、访问许可或各站点标记一致。用词汇表命名字段,只映射获准来源实际返回的内容。

为映射规则保留版本。如果“Senior”从一个职位族移到另一个,旧记录不应看起来一直使用新规则。规范化序列可以从原始值和已记录规则重建;覆盖原始字段会破坏这种能力。只在来源协议允许范围内保留,并与规范化记录遵守同一保留边界。

当两个站点用不同格式描述同一职位时,这一点尤其重要。一个可能提供结构化城市和国家,另一个把二者放在同一文本字段,第三个可能省略国家而只写都市区。规范化比较仍然有用,但规则必须说明哪些是推断、哪些是来源提供。为每个映射值记录来源字段路径或响应位置,使审核者能看出国家来自提供方字段还是应用猜测。来源没有国家而映射又需要国家时,规范化值应保持未知。不要用浏览器区域设置、代理地区或界面语言替代,它们描述观察环境,而不是职位。

雇主规范化也需要同样轨迹。站点可能用展示名、法律名称或招聘机构标注同一组织。来源提供的组织标识符强于名称匹配,但仍只在该来源内有效。记录标签、标识符和连接两条记录的规则。低置信关系应保持可见,不要合并成一行雇主。这样既能按来源比较数量,也能在新证据表明是两个组织时撤回匹配。

映射不能确定时,规范化字段还应带有置信度或解决状态。职位族可以是 mapped,地点可以是 partial,雇主可以是 unresolved。这些状态比空字符串更有用,因为它们区分“来源未提供”和“尚未解释”。导出和报告中保留相同状态,避免下游分析把未解决值当成干净值。

判断重复发布是否为新实例

站点可能用新 URL、新内部标识符或修改后的标题重新发布职位。任何单一变化都不能证明新空缺,也不能证明连续性。除非获准来源建立关系,否则保留独立实例。

构造的观察来源证据接受的关系
相同键,标题修订发布键未变;来源提供更新同一实例的字段修订
新 URL,可见雇主和标题相同URL 改变;无来源连续性字段关系未解决;在有证据前保留为独立实例
新键,来源标明替换来源明确把新公告与旧公告关联关联实例;保留两个键和关系
另一站点上相同标题与城市不同来源且无共享键不同来源实例;不能按标题和地点合并

该表是构造示例,不是实测站点行为。房产公告模型采用同一原则:公告实例、实体房产和报价彼此不同。招聘中,来源发布实例、雇主职位和候选人申请也同样不同。

来源提供作用域键时使用它,并记录匹配被接受或保持未解决的原因。按标题、雇主和地点做模糊匹配可以提出候选对,但候选不是连续性证明。保留两个来源键和关系标签。去重步骤合并记录时,记录规则和证据,使后续审计能区分两条恰好同名的真实不同空缺。

关系标签需要能经受后续刷新。记录 same_occurrence、related_occurrence 或 unknown,并保存证据:共享来源键、明确替换字段或来源提供的规范引用。不要只根据当前规范化标题推导标签。标题可能在一条发布内变化,而相同标题也可能对应全新空缺。关系描述的是来源连续性,不是文本相似度。

当站点同时提供发布标识符和职位标识符时,分别保存。重复发布可能改变前者而后者稳定,也可能相反,取决于来源模型。只记录一个会丢失去重所需的区别。两者都没有时,把 URL 和观察时间作为证据保留,但把实例标记为暂定。暂定记录可用于有限分析;没有额外证据时,不能合并为永久规范职位。

来源引用应与实例键并存,而不是替换它。URL 可能因跟踪参数、语言前缀或站点迁移而变化,旧 URL 之后也可能重定向。分别保存实际观察到的引用和用于比较的规范化形式。重定向可以提示值得调查的关系,但不能单独证明目标就是同一发布。把它作为向来源提出的问题,而不是 URL 字符串规则。

检测关闭但不虚构关闭

Google 到期指南说明不再接受申请的公告必须到期,并列出方式:把 validThrough 填为过去时间、用 404 或 410 移除页面,或移除 JobPosting 结构化数据。这描述的是发布方对搜索体验的义务。采集方看到卡片缺失或响应变化,并不等于观察到了其中任一事件。

基线后的构造事件观察接受解释
接受字段更新相同来源键;来源提供修订后的标题或地点观察到的修订;不声称新雇主或新空缺
新 URL 的重复发布新引用;无连续性证据独立实例,关系未解决
刷新失败没有接受的来源记录采集事件;不删除此前接受值
有限列表中卡片缺失列表窗口有效;未观察到目标有限缺席;关闭仍未确立

datePosted 描述在线公告发布时间,validThrough 描述有效期边界,观察时间记录应用查看的时刻。已知来源含义时,已过期的 validThrough 可以支持到期标签,但不能说明职位何时填补。缺失行只能支持“本窗口未观察到”,不能支持“已关闭”。挑战页、超时或解析拒绝是事件,不是成功的空结果。

自有夹具可以在不采集真实站点的情况下重放四行。要求得到一次接受修订、一个独立重复发布实例、一次刷新事件和一次有限缺席。拒绝把四者都转成关闭的输出。这检查应用的分类逻辑,不测量具体站点的更新频率,也不证明空缺仍然开放。

关闭检测还需要时间边界。公告可能因查询窗口移动、列表截断或排序变化而从结果中消失。记录查询或数据源范围、请求的页面范围与观察时间。只查看第一页时,该页缺席不等于站点缺席。列表顺序变化时,缺失条目可能是分页伪影。将这些结果与来源提供的到期状态分开。

来源自身状态优先于应用推断。获准来源返回明确关闭或到期状态时,连同字段名和观察时间记录。返回移除响应时,与成功的空列表分别记录。因挑战、超时或畸形响应而没有可用内容时,记录事件。应用的生命周期视图可以说“来源确认到期”“本窗口未观察到”或“未知”,而不是把所有消失都归为一个关闭标签。

历史记录应保留当时可用的证据。后续来源合同可能增加状态字段,但不会把旧缺席追溯变成关闭。观察结果与来源结构版本一起保存。结构变化时,开始新的解释序列,或明确协调旧记录。这与规范化字段遵循同一原则:规则变化不应看起来像世界变化。

使用最小入库结构

小型记录让决策可复核:

source_namespace, source_posting_key, raw_title, raw_location,
raw_employer_label, employer_ref, normalized_title, normalized_location,
normalization_rule_version, date_posted, valid_through,
query_scope, page_range, source_schema_version,
observed_at, observation_outcome, relation_to_prior_occurrence

该结构是应用记录,不是站点强制格式。缺失字段保持空值或未知,不填入猜测值。来源响应结果与解释后的生命周期分开保存。两个观察共享实例键时,可以比较字段修订;不共享时,关系在来源提供证据前保持未解决。

招聘站点访问边界区分公开列表页与需要认证的候选人数据。入库结构不会改变这一边界。候选人资料、申请和消息不在采集范围内,即使浏览器会话能够访问。优先使用官方数据源或获准导出,在缺少许可或必要证据时停止。

先选获准来源,再谈浏览器路径

RFC 9309明确指出,robots 规则不是访问授权。允许抓取的公开页面,不一定允许建立市场数据集或再分发招聘信息。站点适用条款与真实数据协议决定可以采集和保留什么。浏览器成功响应不是许可。

BotBrowser 时区、区域与语言文档描述浏览器语言、时区和区域设置,支持自动检测与手动覆盖。这些设置能让获准观察环境保持明确,手动覆盖需要 ENT Tier1 许可,但不能确定职位地点、雇主国家或站点地点文本的含义。

配置文件参考记录可配置且要求主版本一致的配置文件包、配置优先级和字段可用性。配置文件能让声明的浏览器输入可复现;它不能登录、授予数据许可或保证不同运行返回相同公告。将配置文件和观察条件与已接受记录一起保存,并以来源协议作为访问和保留的依据。

常见问题

两个站点标题相同,可以合并为一个职位吗?

只有在来源证明它们描述同一发布或职位时才能合并。相同文本只是待审核候选,不是证明。保留各来源实例和明确的未解决关系,直到确立连续性。

公告从列表中消失,说明职位已关闭吗?

不能。有限列表可能因多种原因遗漏公告,刷新失败也不是空结果。记录缺席,并在赋予关闭状态前要求来源证据,例如到期状态或移除响应。

可以把 datePosted 当作采集时间吗?

不能。它是在线公告的发布日期。将采集方的观察时间与来源的 datePosted、validThrough 分别保存,并保留各自含义。

BotBrowser 提供招聘数据或采集许可吗?

不提供。它提供有文档说明的浏览器配置输入,不提供招聘数据、不登录、不授予访问,也不确定站点条款;请使用获准来源,并只保留协议允许的内容。

来源

实践结论

围绕来源作用域内的发布实例构建获准招聘记录。原始值与规范化值一起保存并带映射版本,在来源确认连续性前保留重复发布为独立实例,把发布时间、到期时间和观察时间当作不同事实。分类刷新失败与有限缺席,不虚构关闭。浏览器参数可以让获准观察可复现;获准来源及协议决定可用数据、含义与可保留历史。

#Job Posting Scraping#Job Market Data#Browser Automation

本文属于指南: 浏览器部署与发布:运维决策地图

在 BotBrowser 里跑一遍同样的检查

加载 profile,让刚读到的这些信号在浏览器内部保持一致,并在正式上线前先在自己的机器上确认结果。