
有人問哪個職位來源提供最完整的數據。這個問題表示需要比較來源。它沒有顯示優勝者。它沒有顯示市場規模。該公開問題見於 Reddit。
Actor 是託管的程式,用來收集數據。Task 是為 Actor 儲存的輸入預設。Actor 儲存來源行。比較由你自己做。Task 不會替你比較來源。這個方法不會為每個用戶把來源排名。它不為薪酬評分。它不按成本把工具排名。
一次執行是用一項輸入做的一次收集。原始行是審閱前儲存的一則刊登。來源 id 是該來源的刊登編號。有用刊登符合你的職位、市場和時段,並且有已知的來源 id。重複項是同一則刊登被儲存多於一次。再刊登是同一個空缺再次發佈。機會是你把重複項和再刊登歸組之後的一個空缺。欄位覆蓋是所需欄位在有用刊登中出現的頻率。市場覆蓋是這次測試收集到哪些空缺。這是兩件不同的事實。
執行八項行動
- 寫下決定和你需要的欄位。
寫下你必須作出的選擇。做公開職位市場研究時,你通常需要四項事實。你需要來源名稱、職位、地點,以及可用的描述。寫明職位。寫明市場。寫明語言。寫明刊登時段。寫明你收集行的日期和時間。寫明納入規則。納入規則說明哪些行算作你想要的職位。
為這次小型測試挑選兩個來源。不要假設它們列出相同空缺。一個面板是一個職位、一個市場、一個時段和一個來源。兩個來源使用相同的面板規則。如果職位或時段改變,這些檔案回答的是不同問題。你不能公平地比較它們。
目前的 LinkedIn hiring-trends Task 是一個廣泛樣本。它不是你的比較面板。它的搜尋字是分三行的三個職位:software engineer、data analyst 和 product manager。它的 startUrls 清單是空的。startUrls 是可選的開啟頁面清單。saveOnlyUniqueItems 是 true。該設定在儲存時只保留重複刊登的一份。把這三個職位換成你寫明的一個職位。加入一個對應地點和一個時段。保持 startUrls 空白。這條路徑是關鍵字搜尋。不要用已知的職位頁面網址取代搜尋字。
- 設定可以比較的預算和篩選。
為每個來源寫下搜尋字、頁數上限和行數上限。上限是你讓該次執行最多儲存的行數。上限限制你能看到的範圍。它不是市場中的職位數量。如果一個來源達到上限,另一個來源提早停止,原始計數就不是對等證據。達到上限的來源可能還有多於你已儲存的相符職位。記錄實際執行的輸入。記錄每次執行為何停止。
使用 2026年10月13日查核過的輸入名稱。較新的公開頁面可以改變這些名稱。依賴舊清單之前,先閱讀目前的名稱。
LinkedIn Jobs Actor 的公開 build 0.2.19 支援 searchTerm、location、postedWithin、maxItems、maxPagesPerSearch、saveOnlyUniqueItems 和 fetchJobDetails。它亦支援目前輸入清單中的其他篩選。fetchJobDetails 為 true 會指示該次執行嘗試儲存完整職位文字。一個小型 LinkedIn 例子可以使用職位 software engineer、一個市場、postedWithin 為 any、maxItems 為 3,以及 maxPagesPerSearch 為 1。同時把 saveOnlyUniqueItems 設為 true,把 fetchJobDetails 設為 true。只有當你寫明的時段就是該控制項所指的完整範圍時,any 這個值才正確。
Indeed Jobs Task 對應 Indeed Jobs 公開 build 1.2.14。該 build 支援 searchTerm、country、location、maxItems、maxPagesPerSearch、postedWithinDays 和 saveOnlyUniqueItems。它亦支援目前的可選篩選。使用一個對應的 country、location 和職位。不要把最低薪酬設為高於零。薪酬篩選會隱藏刊登。那會改變覆蓋計數。一個小型 Indeed 例子可以使用 maxItems 為 2、maxPagesPerSearch 為 1,以及 saveOnlyUniqueItems 為 true。
3 行例子和 2 行例子不是一對已配對的預算。它們只顯示極小的執行是有效輸入。做比較時,兩個來源設定相同的 maxItems。兩個來源設定相同的 maxPagesPerSearch。如果一個來源不能接受該數字,寫下這個差別。
LinkedIn 使用 postedWithin。Indeed 使用 postedWithinDays。這些控制項不是相同輸入。為你寫明的時段,在每個來源選擇最接近的允許值。如果時段仍然不同,寫下這個不相符。不要說這些樣本相等。
Indeed 有 country 輸入。已查核的 LinkedIn 輸入使用 location,沒有獨立的國家欄位。把 Indeed 的 country 和 location 設成與你放入 LinkedIn location 的同一個已寫明市場。如果地點控制項仍然不同,寫下這個差別。
這個 LinkedIn 區塊展示輸入欄位如何排列的一個小型例子。取代市場代用字。如果你寫明了不同職位,就取代職位。SET_YOUR_MARKET 是提示,不是真實地點。
{
"searchTerm": "software engineer",
"location": "SET_YOUR_MARKET",
"postedWithin": "any",
"maxItems": 3,
"maxPagesPerSearch": 1,
"saveOnlyUniqueItems": true,
"fetchJobDetails": true,
"startUrls": []
}這個 Indeed 區塊展示輸入欄位如何排列的一個小型例子。SET_THE_CLOSEST_ALLOWED_VALUE 是提示,不是真實的 Indeed 設定。在該處放入最接近的允許日數值。不要加入最低薪酬。
{
"searchTerm": "software engineer",
"country": "SET_YOUR_COUNTRY",
"location": "SET_YOUR_MARKET",
"postedWithinDays": "SET_THE_CLOSEST_ALLOWED_VALUE",
"maxItems": 2,
"maxPagesPerSearch": 1,
"saveOnlyUniqueItems": true
}這些控制項的已查核執行儲存了四類值。它們儲存了不是空白的來源刊登 id。它們儲存了來源頁面網址。它們儲存了收集時間。它們儲存了完整描述。那些執行使用不同地方和不同時段。兩次都在較小的行數上限停止。該查核顯示,Actor 在那些輸入上可以儲存這些欄位。它不是配對測試。它不是排名。沒有核實任何真實的共用職位配對。沒有核實任何完整覆蓋數字。把這些相同的輸入約定用於你自己的配對面板。
- 分別收集每個來源,然後把行分類。
比較來源之前,先把每一已儲存行分入一個組。保持這些組分開。
- 有用行。
- 超出職位、市場或時段的行。
- 同一已儲存檔案內的重複項。
- 沒有來源 id 的行。
- 被封鎖或失敗的請求。
- 達到上限的搜尋。
交代你計劃執行的每項輸入。被拒絕的執行可以傳回零行。那個零不能證明沒有職位。把失敗和真正的空白結果分開。如果你不知道某個計數,就讓它保持未知。不要在那個位置寫零。混在一起的零可以令被封鎖的來源看起來像是空白。
- 兩個樣本使用同一規則。
對每一行用同一方式讀取職位、地點和時段。完整描述文字可以決定難判斷的情況。單看職稱可以太含糊。descriptionStatus 為 full 表示已儲存完整描述。這不表示你自造了一個短文字標籤。
如果日期缺少,而你的規則需要日期,就讓該行保持未解決。如果市場缺少,而你的規則需要市場,就讓該行保持未解決。你送出的市場不能證明每一則刊登都在該地點。刊登文字可以寫出另一個地點。
有目的地對應各欄。每個來源使用自己的欄位名稱。在原始儲存中保留那些原名。用那些欄位裡的數據填入比較欄。URL 是刊登的頁面網址。
| 比較欄 | 你儲存的內容 |
|---|---|
| 來源與職位 id | 來源名稱加上它自己的刊登 id |
| title | 職位名稱文字 |
| companyName | 僱主名稱 |
| locationRaw | 按儲存原樣的地點文字 |
| jobUrl | 刊登頁面網址 |
| descriptionText | 描述文字 |
| descriptionStatus | 描述是否完整 |
| scrapedAt | 你收集該行的時間 |
| query | 你送出的搜尋字 |
| searchLocation | 你送出的市場 |
| 執行情境 | 你執行的輸入,以及它為何停止 |
在每一欄旁邊寫上原始來源欄位。不要把原始欄位改名到失去原名。LinkedIn 的 postedAt 可以從相對時間片語計算出來。相對時間片語說明刊登在多久之前出現。該值不是發佈時間的確切證明。Indeed 的時間值保持該來源所述的意思。postedWithinDays 亦保持該來源的意思。可選欄位可以缺少。刊登 id 可以缺少。行數不能證明你找到每一個空缺。行數不能證明職位是真實的。
- 比較已審閱的機會,不要比較原始 id 數字。
先在每個來源內把重複項和再刊登歸組。然後審閱兩個來源之間可能的配對。用那些已審閱的組做比較。不要把一個空缺的兩次儲存計成兩個空缺。
來源 id 只在該來源的命名空間內唯一。命名空間是該來源自己的 id 集合。不要因為數字相同,就把 LinkedIn 職位 id 連接至 Indeed 職位 id。相同數字可以屬於不同刊登。
每一對都保留兩個來源 URL。來源 URL 是該刊登的頁面網址。保留 LinkedIn URL 和 Indeed URL。不要用其中一個 URL 取代另一個。
比較僱主。比較職位。職位是刊登要求一個人做的工作,不只是職稱那一行。比較地點。比較可見的職缺編號。職缺編號是刊登有顯示時,僱主的空缺編號。比較完整用字。比較觀察時間的情境。觀察時間是你看到該刊登的時間。情境是該刊登在那個時間所述的內容。
只有這些事實一致時,才確認一對。每一個已確認配對都保留兩個 URL。
單靠職稱不是確認。單靠 id 不是確認。相同僱主加上相近職稱仍然需要這次審閱。它們不是自動配對。
弱配對保持不確定。互相矛盾的配對保持不確定。弱配對有缺少的事實,或只有部分相同事實。互相矛盾的配對有不一致的事實。不同的職缺編號並不一致。描述另一個空缺的用字並不一致。顯示兩個不同空缺的觀察時間並不一致。把不確定配對放在已確認重疊之外。
- 建立已確認集合,並點算四個組。
把第一個來源已確認的有用機會稱為集合 A。把第二個來源稱為集合 B。點算四個組。併集是這次收集測試中每一個已確認機會。交集是你已確認的重疊。只屬 A 的機會出現在 A 而不在 B。只屬 B 的機會出現在 B 而不在 A。把不確定配對另作一個計數報告。不要強迫它們進入交集。
併集只覆蓋這次收集的測試。它不是該市場中每一個開放中的職位。不要對這些計數使用捕捉再捕捉法。捕捉再捕捉法從兩個樣本的重疊估計整個母體。它需要隨機樣本。它需要分開的樣本。這些來源不是隨機樣本。同一職位可以因你沒有量度的原因同時出現在兩邊。報告這四個計數。不要把它們變成整個市場的總數。
- 在每個有用樣本內比較所需欄位。
用完整描述的計數,除以具有已知來源 id 的有用刊登計數。該比例是描述的欄位覆蓋。把缺少的來源 id 另作一個計數報告。不要先刪除它們,然後說得好像每一已儲存行都有用。缺少 id 的行仍可以是真實的行。它是配對時較弱的行。
欄位覆蓋不是市場覆蓋。一個來源可以只新增很少機會,但仍然重要。當它提供你需要的欄位時,它就重要。只有在你量度過成本數字時才保留成本數字。只有在你量度過工作量數字時才保留工作量數字。不要編造最便宜的來源。不要編造最好的來源。
- 只為這次決定選擇組合。
根據新增的已確認機會和必要欄位作選擇。新增很少的來源仍可以留在組合中。當它的行提供你無法從另一來源取得的欄位時,就保留它。如果收集失敗,用同一個已寫明的面板再做一次。如果不確定大到無法決定,就重複同一個面板。不要只為增加行數而重複。更多行不能修補被封鎖的執行。更多行不能修補模糊配對。不要說某個來源對所有職位和市場都是最好。
演算一個虛構的配對測試
本節的數字是虛構的。它們用來教算術。它們不是產品結果。它們不是上文已查核的執行。來源 A 和來源 B 只是標籤。此虛構例子沒有說明哪個標籤是 LinkedIn。此虛構例子沒有說明哪個標籤是 Indeed。J1 至 J8 是機會標籤。它們不是來源 id。
在此虛構例子中,兩個面板使用相同職位、市場和時段。來源 A 儲存 8 個原始行。來源 B 儲存 7 個原始行。審閱後,A 剩下 6 則具有已知來源 id 的有用刊登。審閱後,B 剩下 5 則具有已知來源 id 的有用刊登。減少的部分把不相關行和重複行一併計算。此虛構例子沒有拆開這兩個原因。不要自行編造該拆分。缺少的來源 id 沒有說明。讓它們保持未知。不要用零填補。
| 量度 | 來源 A | 來源 B |
|---|---|---|
| 原始行 | 8 | 7 |
| 具有已知來源 id 的有用刊登 | 6 | 5 |
| 原始行中有用行所佔比例 | 6/8 = 75% | 5/7 = 71.4% |
| 有用刊登中的完整描述 | 6 項中的 5 項 = 83.3% | 5 項中的 4 項 = 80% |
| 停止 | 達到其上限 | 在其上限之前結束 |
| 未解決的配對 | 此虛構例子中沒有 | 此虛構例子中沒有 |
| 缺少的來源 id | 未有說明 | 未有說明 |
| 未使用原始行的拆分 | 未有說明 | 未有說明 |
75% 和 71.4% 這兩個比例使用此虛構例子的規則。它們不是某個來源的準確度分數。6 除以 8 得到 75%。5 除以 7 得到 71.4%。
已審閱的集合是:
- A = {J1, J2, J3, J4, J5, J6}
- B = {J4, J5, J6, J7, J8}
| 機會 | 在 A | 在 B | 組別 |
|---|---|---|---|
| J1 | 是 | 否 | 只屬 A |
| J2 | 是 | 否 | 只屬 A |
| J3 | 是 | 否 | 只屬 A |
| J4 | 是 | 是 | 兩者 |
| J5 | 是 | 是 | 兩者 |
| J6 | 是 | 是 | 兩者 |
| J7 | 否 | 是 | 只屬 B |
| J8 | 否 | 是 | 只屬 B |
交集是 {J4, J5, J6}。計數是 3。併集是 {J1, J2, J3, J4, J5, J6, J7, J8}。計數是 8。只屬 A 是 {J1, J2, J3}。計數是 3。只屬 B 是 {J7, J8}。計數是 2。此虛構例子中每個已納入的配對都已解決。沒有配對留在不確定組。
把 B 加到 A 會新增 2 個已確認機會。兩個比例描述這次新增。它們回答不同問題。使用與你的問題相符的比例。
- 新機會除以 A 的 6 項:2/6 = 33.3%。當你問 B 為 A 增加多少時,使用這個比例。
- 只屬 B 的機會除以 8 項的併集:2/8 = 25%。當你問已收集併集中有哪一部分只來自 B 時,使用這個比例。
不要調換這兩個比例。第一個比例以 A 的有用集合為基數。第二個比例以已收集的併集為基數。
來源 A 在 6 則有用刊登中有 5 則完整描述。5 除以 6 得到 83.3%。來源 B 在 5 則有用刊登中有 4 則完整描述。4 除以 5 得到 80%。這些是欄位比例。它們不量度整個市場。
在此虛構例子中,A 達到其上限。B 在其上限之前結束。兩個集合都不是開放職位的完整計數。如果之後的執行使用較高上限和相同規則,只屬 A 的計數可以上升。虛構的選擇可以是以 A 為主要來源,再加上 B 的 2 個新增機會。該選擇只適用於這次已寫明的測試。它不是通用排名。展示欄位、集合、停止狀態和未知計數。
此虛構例子沒有給出發佈日期。空白日期不是第 0 日。如果你的時段規則需要日期,該行保持未解決。此虛構例子沒有該未解決行。真實的不確定配對在你選擇之前需要自己的計數。
來源與延伸閱讀
作者 Chronometrica · 更新日期
返回頂端 ↑

