两份已保存的职位描述通过相互对应的来源段落连接起来。
在两个已知时间比较同一条职位。

一条条款是你选择核对的一句决策用语。例子包括任职比例、雇佣类型、薪酬表述和工作地点。任职比例指该任职占一份全职工作的份额,例如职位原文中的“100%”或“50%”。

完成这八个步骤

  1. 选择可能改变你决定的条款。

阅读这些条款在原始职位中的用词。标题、可选的资历标签或搜索词并不是完整要求。资历可以缺失。如果所选短语不清楚,就保持不清楚。不要猜测一个值。这些步骤只涵盖公开条款比较。它们不解释候选人状态、推荐人核查或招聘意图。

  1. 从你的旧保存开始,再采集一条新记录。

旧正文必须已经在你的文件中。Indeed Jobs Scraper 是一个 Actor。Actor 是托管的数据采集程序。它采集当前的公开记录。它不能重建旧的职位描述。它不提供雇主的编辑时间、申请人状态或自动条款标签。这里所述的比较由你来做。

写在职位正文里的日期不是编辑时间。对每次保存,保留运行标识、来源标识、输入、scrapedAt、descriptionStatus 和原始文本。scrapedAt 是采集该条记录的时间。一次运行是 Actor 的一次执行。

  1. 在比较用词之前,先匹配同一条职位。

先匹配同一来源命名空间和同一 jobId。命名空间是拥有该 ID 的网站。然后核对 jobUrl、职位和公司。将 jobId 作为文本保留。如果表格把它存成数字,很长的 ID 的各位数字或其数值可能会改变。仅标题相同,不能证明两行是同一版本。

不同的来源 ID 保持未解决。不确定的重新发布也保持未解决。该匹配请使用已发布的重复与重新发布指南。在关系确定之前,不要比较文本。把身份冲突记在你的笔记中。

  1. 要求所选条款具有可比较的文本。

在寻找用词差异之前,先阅读 descriptionStatus。full 表示来源文本可用,并已保存在 descriptionText 中。missing 表示该文本不可用。这个 Actor 没有摘要状态。full 并不保证是雇主的整份文件。

旧文本缺失、新文本为 full,是新获得的证据。它不是雇主改变了某项要求的证明。短摘录对照完整正文可能制造虚假差异。那些多出来的词,可能在你尚未持有它们时就已经存在。先保存可用状态。然后再比较段落。

  1. 保留原始文本,并制作一份比较用副本。

不要改动原始 descriptionText。只为处理间距制作第二份副本。在该副本中,当含义保持不变时,把已声明的空白连接起来。空白指空格、制表符和换行。你可以把只产生这些相同分隔的标记视为相同的间距。不要删除百分数、货币用词、单位、否定或其他限定语。“not”可以颠倒一条规则。一个百分数值可以改变决定。

保存确切的旧段落和确切的新段落。在你知道它们在来源文本中的位置时,保存这些位置。如果某一位置未知,就写下 unknown。不要写零。

  1. 为所选条款归入一种状态。

使用以下五种状态之一:

  • no_observed_change
  • formatting_only
  • substantive_wording_change
  • newly_available_text
  • unresolved

当同一职位具有完整且可比较的文本,且所选词语在含义上不同时,使用 substantive_wording_change。当只有已声明的间距不同时,使用 formatting_only。当该所选条款相同时,使用 no_observed_change。该状态不涵盖你没有阅读的字段。当旧的来源文本不可用、后来变为可用时,使用 newly_available_text。条款缺失不是文本缺失。旧的完整可比较文本中没有所选条款,而新的完整文本加入了该条款,这可以是 substantive_wording_change。当身份尚未确定时,使用 unresolved。

文本差异指向一次复核。它本身不能证明一项新的雇佣条件。在你依据任职或薪酬表述采取行动之前,先阅读雇主当前的官方页面。

  1. 用平实的话报告时间界限。

写明该变化是在旧的 scrapedAt 与新的 scrapedAt 之间被观察到的。不要写雇主在新的 scrapedAt 编辑了该职位。其他来源处理也可能改变你看到的用词。你无法判断两次保存之间发生了多少次编辑。该次数是未知的。未知不是零,也不是一。当前运行不提供自动历史。

你第一次注意到的一条职位,属于另一项任务。请使用已发布的新提醒指南。职位条数也属于另一项任务。条数请使用已发布的职位趋势指南。

  1. 交付一条成对记录。

包含身份、原始段落、可用状态、比较规则、状态、两个时间,以及当前来源核对。当前来源核对是你阅读时雇主官方页面所说的内容,或一条你尚未阅读的说明。如果某一项重要条款仍不清楚,请通过你自己的流程询问雇主联系人。这些步骤不发送消息。它们不读取私人申请状态。

保存这些字段

使用 Actor 的这些行字段。可选字段可以不存在。不存在表示该值未被提供。它不表示零,也不表示雇主没有该项。

保存这些字段
字段它是什么
jobId来源身份。将其作为文本保留。
title职位名称。它不是完整身份。
companyName雇主名称,用于身份核对。
locationRaw地点文本,按来源所显示的样子。
descriptionText为该行保存的职位用词。
descriptionStatusfull 或 missing,表示可用的来源文本。
jobUrl职位地址,用于身份核对。
query用于该行的搜索词。
searchLocation搜索中使用的地点。
scrapedAtActor 保存该行的时间。

seniority、employmentType、salaryRaw、postedAt 和 postedAtRaw 是可选的。其中任何一项都可以缺失。postedAt 在存在时,是来源给出的发布时间。它不是雇主的编辑时间。descriptionText 内的日期也不是编辑时间。

保存原始行、所运行的输入,以及运行输出。同时保存行上限的证明,或一次失败运行的证明。上限是 maxItems 停止条件。一次成功的空运行并不能证明没有职位存在。一次达到上限的运行并不能证明你采集了每一条职位。

设定一次小型的首次运行

Task 是已保存的输入预设。当前公开 Task 是一份起始输入。它不是比较会自行运行的证明。公开版本 1.2.14 已于 2026-10-13T05:55:51.545104+00:00 接受检查。它接受 searchTerm、country、location、maxItems、maxPagesPerSearch、postedWithinDays、sortBy 和 saveOnlyUniqueItems。

已保存的 Task 输入是:

json
{
  "country": "us",
  "searchTerm": "software engineer",
  "maxItems": 100,
  "postedWithinDays": "7",
  "sortBy": "date",
  "maxPagesPerSearch": 2,
  "saveOnlyUniqueItems": true
}
设定一次小型的首次运行

对于首次核对,设定一个目标职位和一个市场。为这一对设定 country 和 searchTerm。只有在你需要一个地点时才添加 location。用 maxItems 2 和 maxPagesPerSearch 1 替换宽泛的行上限。postedWithinDays 和 sortBy 只限制该运行请求哪些当前职位。它们不返回上周的用词。saveOnlyUniqueItems 可以为一个项目保留一条当前记录。它不重建更早的用词。你仍然需要你自己更早的保存。

对该版本的一次兼容检查返回了两个来源 ID 和 URL。两行都有完整的 descriptionText。该运行达到了上限。该检查表明文本采集是受支持的。它不是下方例子的实时发现。它并不表示只存在两份职位。

演算这五对虚构例子

下方五对是原创虚构。它们用来讲授这些状态。它们不是 Actor 的结果,也不是雇主方面的发现。这些虚构时间没有给出年份。不要把它们当作版本检查的时间。

演算这五对虚构例子
配对可用情况身份差异状态下一步核对
J1两次均为 full相同的来源 ID 和职位任职用词不同substantive_wording_change复核这些段落。然后阅读雇主当前的官方页面。
J2两次均为 full同一条职位仅换行formatting_only不要把间距当作一条新条款。
J3先为 missing,后为 full同一条职位文本变为可用newly_available_text保留新文本。不要声称条款已改变。
J4未使用不同的来源 ID,相同的标题身份尚未确定unresolved停止。使用重复与重新发布指南。
J5两次均为 full同一条职位所选条款相符no_observed_change只报告该条款。其他条款另行核对。

J1 在 10月1日 10:00 UTC 有全文:“Full-time appointment, 100%.”同一来源 ID 和职位在 10月8日 10:00 UTC 有全文:“Career appointment, 50%.”两次保存都是 full,因此这不是新获得的文本。间距规则不能解释这一变化。“Full-time”和“Career”是不同的任职用词。“100%”和“50%”是不同的比例。状态是 substantive_wording_change。两个时间相隔七天。报告在 10月1日 10:00 UTC 与 10月8日 10:00 UTC 之间观察到的一次变化。不要把 10月8日称为雇主的编辑时间。不要解释用词为何改变。两次保存之间的编辑次数是未知的。

J1 的一条成对记录可以像这样:

text
identity: same fictional source jobId both times; role matches; company and jobUrl are not supplied
old scrapedAt: October 1 10:00 UTC
new scrapedAt: October 8 10:00 UTC
descriptionStatus: full / full
old passage: Full-time appointment, 100%.
new passage: Career appointment, 50%.
positions: unknown
comparison rule: raw text kept; spacing rule does not remove percentages or appointment words
state: substantive_wording_change
time reading: change observed between the two scrapedAt values
current source check: not done in the fiction
演算这五对虚构例子

你可能会在新的观察时间阅读 J1 的雇主当前官方页面,并看到 50%。这一阅读仍然不能解释非公开的招聘决定。它不能证明你更早对任职表述的理解是正确的。要得到该证明,你需要已保存的旧来源文本。

J2 在两个时间都是 full。唯一的差异是在已声明空白规则下的换行。虚构文本是:

text
old: "Same words stay."
new: "Same words\nstay."
演算这五对虚构例子

比较用副本把换行连接起来。两份副本随后都读作“Same words stay.”含义没有改变。状态是 formatting_only。不要根据这些换行报告一项新的雇佣条件。

J3 的旧行缺少描述,新行有完整描述。旧的所选条款未被观察到。状态是 newly_available_text。你可以把新段落作为新证据保留。你不可以说雇主改变了该条款。用词差异未被计算,因为这些用词在已保存的旧记录中不可用。

J4 具有不同的来源 ID 和相同的标题。标题相同不是身份相同。不要把两段正文当作一份职位的两个版本来比较。在重复与重新发布指南确定该关系之前,状态是 unresolved。如果该指南不能确定这一对,就让它保持 unresolved。

J5 在两个时间都有全文,且所选条款的用词相同。对该条款,状态是 no_observed_change。这不是每个字段都保持相同的证明。另一条条款仍可能不同。逐一核对每个所选条款。

这五对给出一次实质性用词变化、一次仅格式变化、一次可用状态变化、一次未解决的身份,以及一条未变化的条款。这是五种状态,每种各一对。这些计数都不是市场计数。

来源和延伸阅读

作者 Chronometrica · 更新日期

返回顶部 ↑