58同城招聘信息爬取:解決申請人數和瀏覽人數數據不一致問題
在爬取58同城招聘頁面時,經常遇到一個棘手的問題:網頁源代碼顯示的申請人數和瀏覽人數與頁面實際顯示的數據不符,源代碼中往往顯示為0,而頁面實時更新的數據卻與瀏覽器開發者工具(F12)中的Elements內容一致。 這篇文章將探討如何解決這個問題,獲取準確的申請人數和瀏覽人數。
問題分析:
58同城為了防止數據被惡意爬取,采用了動態加載數據的方式。 頁面上的申請人數和瀏覽人數并非直接從html源代碼中獲取,而是通過JavaScript異步加載的。因此,直接解析HTML源代碼無法獲得正確的數據。
解決方案:
要獲取正確的申請人數和瀏覽人數,需要找到58同城提供的API接口。 通過分析網絡請求,我們可以發現一個用于獲取招聘信息統計數據的API接口,其URL類似于以下格式:
https://statisticszp.58.com/position/totalcount/?infoId=27988...
其中infoId參數代表具體的職位ID,需要根據目標招聘頁面的URL進行提取。
API返回數據示例:
API接口返回的json數據包含了我們需要的信息:
{ "deliveryCount": 1141, // 申請人數 "commentCount": 0, "infoCount": 4, // 瀏覽人數 "resumeReadPercent": 0, "referUrl": "", "nextUrl": "null" }
deliveryCount字段表示申請人數,infoCount字段表示瀏覽人數。
實現步驟:
-
獲取職位ID (infoId): 分析目標招聘頁面的URL,找到職位ID對應的參數值。 這可能需要使用正則表達式或其他字符串處理方法。
-
構造API請求URL: 將提取到的infoId替換到API URL模板中,形成完整的API請求URL。
-
發送API請求: 使用python的requests庫或其他HTTP客戶端發送GET請求到API URL。
-
解析JSON數據: 將API返回的JSON數據解析成Python字典,提取deliveryCount和infoCount的值,即為正確的申請人數和瀏覽人數。
通過以上步驟,即可繞過58同城網頁的動態加載機制,準確獲取招聘頁面的申請人數和瀏覽人數數據。 請注意,API接口的地址和參數名稱可能會有變化,需要根據實際情況進行調整。 同時,請遵守58同城的robots.txt規則,避免對服務器造成過大壓力。