寫了個簡單爬蟲,收集 Boss 直聘自動駕駛崗位
朋友想知道 Boss 直聘上關于自動駕駛的崗位有哪些 ,于是,筆者寫了一個簡單的爬蟲 crawler-boss ,將全國大城市相關崗位的信息收集起來。
這篇文章,筆者想分享爬蟲 crawler-boss 的設計思路。
圖片
一、基本原理 Selenium + chromedriver
對于很多動態(tài)渲染的網(wǎng)頁而言,想要抓取它的數(shù)據(jù),就需要對網(wǎng)頁的 JS 代碼以及 Ajax 接口等進行分析。
而當 JS 代碼混亂,難以分析,Ajax 的接口又含有很多加密參數(shù)的時候,就非常難以直接找出規(guī)律,那么上述過程會花費大量的時間和精力。
圖片
上圖中, Boss 直聘接口參數(shù)比較多,筆者并不想花太多時間研究這些參數(shù),于是筆者選擇了另一種方案:Selenium + chromedriver。
Selenium是 web 瀏覽器自動化測試的工具,它可以模擬用戶與所有主流瀏覽器之間的交互,比如點擊,輸入,抓取,拖拽等等。
由于網(wǎng)頁大多采用是 JavaScript 動態(tài)渲染,使得爬蟲返回的結果可能與用戶實際看到的網(wǎng)頁并不一致。我們看到的網(wǎng)頁可能是經(jīng)過 Ajax 加載,或者是JavaScript以及其他算法計算后生成的。
因此,我們可以使用 Selenium直接模擬瀏覽器運行,我們?nèi)庋劭吹降氖鞘裁礃樱軌蜃ト〉臄?shù)據(jù)就是什么樣。
二、安裝 chromedriver
WebDriver 是 Selenium 的核心組件 , 負責控制瀏覽器進行各種操作。WebDriver 可以通過不同的驅(qū)動程序與不同的瀏覽器進行通信,比如 ChromeDriver、FirefoxDriver 等。
1、查看當前Google瀏覽器版本
打開Google瀏覽器,網(wǎng)址欄輸入:chrome://settings/help
圖片
2、下載對應版本的chromedriver
對照你的版本下載,當你使用的是 Chrome 版本 115 或更高版本,就點最上面的鏈接:
https://chromedriver.chromium.org/downloads/
圖片
找到你對應的版本,我這里是122.0.6261.129。
圖片
下載完成之后,將文件解壓后,拷貝到 /usr/local/bin/ 目錄 。
圖片
安裝完 chromedriver 后,Java 應用中添加如下依賴:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>3.141.59</version>
</dependency>
然后通過如下代碼,測試環(huán)境是否 OK 。
public static void main(String[] args) {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://juejin.cn");
}
點擊運行,如果打開了掘金網(wǎng)頁說明環(huán)境配置成功。
三、流程分析
1、進入搜索頁面 , 搜索框中輸入‘自動駕駛’。
圖片
圖片
2、搜索結果若出現(xiàn)登錄浮窗,則關閉,將頁面中職位列表通過 class 截取出來,保存到數(shù)據(jù)庫。
圖片
圖片
3、點擊下一頁
圖片
圖片
四、爬蟲演示
執(zhí)行完成之后,職位記錄表新增了接近 2000 條記錄。
圖片
五、寫到最后
當我們將 Selenium 作為爬蟲工具時,盡管它有很多優(yōu)點,但也存在明顯的缺點。
Selenium 模擬瀏覽器動作,除了加載需要的數(shù)據(jù)外,還會加載圖片、JS、CSS等不必要的內(nèi)容,導致網(wǎng)絡資源和計算資源消耗增加,爬取速度變慢,爬取規(guī)模受限。
因此,長期大規(guī)模使用 Selenium 作為生產(chǎn)工具不是一個明智的選擇。
然而,如果只是想在個人電腦上快速抓取少量數(shù)據(jù),Selenium 確實是一個非常方便的工具。
最后, crawler-boss 的源碼實現(xiàn)非常簡單,假如同學們感興趣,可以關注公眾號,回復 「爬蟲」即可獲取。