
RSS 的意思是 Really Simple Syndication(真正簡易聯合供稿)。它是訂閱閱讀器可以開啟的文件格式。RSS 以 XML 寫成。XML 是有結構的文字。
使用你已經核對過的列
Actor 是一個託管的資料收集程式。Task 是已儲存的輸入預設。Indeed Jobs Scraper Actor 收集來源列。你用已經核對過的列來編寫 RSS 訂閱源。這個 Actor 不會替你編寫這份訂閱源。
Indeed 是這些列所來自的職位網站。公開組建 1.2.14 可以傳回這個方法使用的列欄位。這些欄位是 jobId、jobUrl、title、companyName、descriptionText、descriptionStatus、postedAt、postedAtRaw 和 scrapedAt。jobUrl 是該職位的網址。網址亦稱為 URL。
一項兩列驗收檢查接受了來源識別碼、來源 URL 和完整描述文字。該檢查的上限是兩列。有限樣本並非網站上的每一個職位。這個方法不會修復被封鎖的 Upwork 收集。它不會建立原生的 Indeed 訂閱源。
目前公開的 Indeed Jobs Scraper Task 已於 2026-10-13T05:55:51.545104+00:00 核對。其已儲存的輸入是:
{"country": "us", "searchTerm": "software engineer", "maxItems": 100, "postedWithinDays": "7", "sortBy": "date", "maxPagesPerSearch": 2, "saveOnlyUniqueItems": true}只把該輸入當作起點。收集列時,更換樣本搜尋詞。國家或地點亦要更換。maxItems 100 限制的是請求。它不是找到的職位數量。maxPagesPerSearch 2 限制一次搜尋的頁數。它不是全站覆蓋。saveOnlyUniqueItems true 要求收集過程保留各自只計一次的項目。你在編寫訂閱源之前,仍然要核對識別碼。公開的 Task 並不表示訂閱源的工作會自動完成。
收集、列比對和身分覆核都在這個方法之前。這裡的身分是指一則職位刊登的穩定來源識別碼。只從一組有限的已核對列開始。當一列的識別碼缺失或仍在覆核中,就排除該列。
用八個步驟建立訂閱源
- 界定樣本和目的。
目的是向訂閱閱讀器提供一份有效的已核對刊登文件。從具有已知識別碼的有用列開始。一併保留涵蓋收據。涵蓋收據是一份短註,說明訂閱源包含哪些列。排除缺失的識別碼。排除仍在覆核中的識別碼。
- 選擇項目身分規則。
對於一則 Indeed 刊登,鍵先寫文字 indeed:,然後直接接上 jobId,兩者之間沒有其他文字。GUID 是項目身分字串。GUID 的意思是 globally unique identifier(全域唯一識別碼)。RSS 把它存在 guid 元素中。把 isPermaLink 設為 false。false 表示這個 GUID 不是網址。標題改變時,保持同一個 GUID。描述改變時,保持同一個 GUID。在這條規則下,新的來源識別碼會產生新的訂閱源項目。新的來源識別碼並不能證明這是一個新的僱主職位。當你需要配對同一個職位時,使用另外的方法。
- 建立一份只有一個 channel 的 RSS 2.0 訂閱源。
根元素是 rss,其 version 是 2.0。在其中放入一個 channel。channel 是存放訂閱源標題及其項目的主要群組。一個 item 是訂閱源中的一則職位刊登。RSS 規範要求 channel 具備 title、link 和 description。三者都要提供。為每一列有用的資料加入一個 item。給該 item 一個 title。把原本的職位網址作為它的 link。給它一段短 description。同一規範要求每個 item 具備 title 或 description。這個方法兩者都提供。保持 channel 的 link,讓你的閱讀器可以存取。
- 用 XML 序列化器寫入文字。
這個寫入步驟稱為序列化。不要用手把原始職位文字貼進檔案。「&」號或小於號可以破壞 XML。XML 語法規則說明這些字元必須如何寫出。序列化器是一個程式,它以安全的 XML 形式寫出文字。它保留 Unicode 字母,例如 é。它保留網址中的查詢文字。查詢字串是網址中問號之後的文字。安全的 XML 文字並非安全的 HTML。HTML 是用來繪製網頁的格式。序列化器不會使貼上的 HTML 可以安全顯示。在 item 中使用純文字摘要。把完整職位文字留在原本的職位頁面。只有當你的列檢查接受了 descriptionStatus 時,才使用 descriptionText。companyName 可以留在來源列。訂閱源項目並不要求它。
- 只在刊登時間已確認時才加入 pubDate。
pubDate 是 RSS 對項目刊登日期的名稱。postedAt 是可選的,而且是從來源文字解析而來。一個已填入的 postedAt 值並不能證明精確的刊登時間。檢查 postedAtRaw 和來源證據。只有在刊登時間和時區都已確認時,才加入 pubDate。如果時間缺失、是相對的,或不確定,它就保持不可用。相對時間,例如一句說若干天前的片語,並不精確。下一個日期字串是原本虛構樣本的一部分。RSS 日期樣式看起來像 Mon, 12 Oct 2026 09:30:00 GMT。GMT 是這種樣式用於該 UTC 時間的時區名稱。UTC 的意思是 Coordinated Universal Time(協調世界時)。當刊登時間未知時,不要寫入 pubDate。你可以在項目摘要或涵蓋收據中寫出觀察時間。scrapedAt 是觀察時間。不要把 scrapedAt 用作刊登時間。lastBuildDate 的意思是建立訂閱源文件的時間。只有當你分開追蹤該建立時間時,才加入 lastBuildDate。不要用建立時間去填補未知的職位日期。
- 對帳來源列和訂閱源項目。
對帳的意思是比較兩份清單,並交代每一列。報告你使用的已知識別碼。報告你排除的列。報告仍然未解決的列。報告重複的鍵。報告沒有刊登日期的項目數量。從有限資料集建立的訂閱源仍然有限。較後樣本中缺少一個項目,並不能證明僱主已移除該職位。閱讀器如何刪除或更新項目,是另一項選擇。
- 解析訂閱源,並分三層檢查。
解析的意思是讀取文件並確認其結構。第一,解析 XML。確認必要元素。確認項目數量。確認每個 GUID 都是唯一的。確認文字改變時,每個 GUID 保持不變。確認每個項目連結。確認解析後的文字與來源文字相符。確認每個日期保留其來源含義。成功的解析顯示 XML 結構健全。它並不能證明每一條 RSS 規則。它並不能證明每一個閱讀器都會接受這份訂閱源。第二,檢查你所依靠的 RSS 規則。第三,測試你計劃使用的閱讀器。匯入的意思是在該閱讀器中開啟訂閱源。在加入真實列之前,先匯入一份小型虛構訂閱源。把該閱讀器測試與文件測試分開。
- 儲存訂閱源和解釋它的註記。
把涵蓋註記、日期註記和來源收據放在一起。來源收據記錄你使用了哪些已核對的列。只有當你的閱讀器需要存取時,才託管該檔案。託管的意思是把檔案放在閱讀器可以取得的地方。本文不會發佈一份可供使用的訂閱源。它不會透露私人存取金鑰。它不會排程重新整理。它不會發送通知。追蹤未見過的職位是另一項工作。
閱讀這份虛構的兩項目訂閱源
本節的訂閱源是原創虛構內容。它用來講解規則。它不是 Actor 的結果。它並不能證明只有兩個職位存在。
樣本有兩則來源刊登。它們的來源識別碼是文字值 000101 和 000102。J1 和 J2 只是這兩列虛構資料的標籤。GUID 是 indeed:000101 和 indeed:000102。J1 已確認的刊登時間是 2026 年 10 月 12 日 09:30 UTC。J2 的刊登時間未知,因此其刊登日期不可用。
| 列 | 來源識別碼 | GUID | 項目連結 | 刊登日期 |
|---|---|---|---|---|
| J1 | 000101 | indeed:000101 | https://jobs.example/J1?role=analyst&city=Austin | Mon, 12 Oct 2026 09:30:00 GMT |
| J2 | 000102 | indeed:000102 | https://jobs.example/J2 | 不可用 |
J1 的標題是 Café Analyst & SQL。其描述是 Check values < 10 & explain results。J2 的標題是 Report Analyst。其描述是 Publication time unavailable. Observed 2026-10-13 05:50 UTC。該觀察時間不是刊登時間。
J1 的標題測試 Unicode 和一個「&」號。J1 的描述測試一個小於號和一個「&」號。J1 的連結測試查詢字串。訂閱源以安全的 XML 文字儲存這些字元。
| 來源文字 | 寫入訂閱源的文字 |
|---|---|
| Café Analyst & SQL | Café Analyst & SQL |
| Check values < 10 & explain results. | Check values < 10 & explain results. |
| https://jobs.example/J1?role=analyst&city=Austin | https://jobs.example/J1?role=analyst&city=Austin |
<?xml version='1.0' encoding='utf-8'?>
<rss version="2.0">
<channel>
<title>Fictional checked analyst sample</title>
<link>https://jobs.example/sample</link>
<description>Two checked sample rows; source collection was capped.</description>
<item>
<title>Café Analyst & SQL</title>
<link>https://jobs.example/J1?role=analyst&city=Austin</link>
<description>Check values < 10 & explain results.</description>
<guid isPermaLink="false">indeed:000101</guid>
<pubDate>Mon, 12 Oct 2026 09:30:00 GMT</pubDate>
</item>
<item>
<title>Report Analyst</title>
<link>https://jobs.example/J2</link>
<description>Publication time unavailable. Observed 2026-10-13 05:50 UTC.</description>
<guid isPermaLink="false">indeed:000102</guid>
</item>
</channel>
</rss>J1 對應第一個項目。它的 GUID 是 indeed:000101,它的 pubDate 是已確認的 UTC 時間。J2 對應第二個項目。它的 GUID 是 indeed:000102。日期空缺是 J2 上缺少的 pubDate。J2 的描述只寫出觀察時間。不要用你建立文件的時間去填補該空缺。
一項本地文件測試解析了這份 XML。它找到一個 channel 和兩個 item。它確認了必要的 channel 文字。它確認兩個 GUID 都是唯一的,而且 isPermaLink 是 false。解析之後,文字與 Unicode 標題、小於號、各個「&」號,以及原本的查詢連結相符。測試讀取了 J1 的刊登日期。它確認 J2 沒有 pubDate。它更改了 J1 的標題,而 GUID 仍然是 indeed:000101。
這些是對這個虛構樣本的文件檢查。XML 解析顯示結構健全。GUID、連結、文字和日期檢查涵蓋這裡使用的 RSS 規則。沒有做過訂閱閱讀器測試。沒有做過 WordPress 測試。先解析你的虛構訂閱源。然後在你自己的閱讀器中做一次小型相容性檢查。
來源與延伸閱讀
作者 Chronometrica · 更新日期
返回頂端 ↑

