兩年前,朋友想知道 Boss 直聘上關於自動駕駛的崗位有哪些 ,於是,筆者寫了一個簡單的爬蟲 crawler-boss ,將崗位的資訊收集起來。
這篇文章,筆者想分享爬蟲 crawler-boss 的設計思路。
1 基本原理 Selenium + chromedriver
對於很多動態渲染的網頁而言,想要抓取它的資料,就需要對網頁的 JS 程式碼以及 Ajax 介面等進行分析。
而當 JS 程式碼混亂,難以分析,Ajax 的介面又含有很多加密引數的時候,就非常難以直接找出規律,那麼上述過程會花費大量的時間和精力。
上圖中, Boss 直聘介面引數比較多,筆者並不想花太多時間研究這些引數,於是筆者選擇了另一種方案: Selenium + chromedriver 。
Selenium 是 web 瀏覽器自動化測試的工具,它可以模擬使用者與所有主流瀏覽器之間的互動,比如點選,輸入,抓取,拖拽等等。
但是 Selenium 與網路爬蟲又有千絲萬縷的關係,由於現在的網頁大多采用是JavaScript動態渲染,使得爬蟲返回的結果可能與使用者實際看到的網頁並不一致。我們看到的網頁可能是經過Ajax載入,或者是JavaScript以及其他演算法計算後生成的。
因此,我們可以使用 Selenium 直接模擬瀏覽器執行,我們肉眼看到的是什麼樣,能夠抓取的資料就是什麼樣。
2 安裝 chromedriver
WebDriver 是 Selenium 的核心元件 , 負責控制瀏覽器進行各種操作。WebDriver 可以透過不同的驅動程式與不同的瀏覽器進行通訊,比如 ChromeDriver、FirefoxDriver 等。
1、檢視當前Google瀏覽器版本
開啟Google瀏覽器,網址欄輸入: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>
然後透過如下程式碼,測試環境是否 OK 。
public static void main(String[] args) {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://juejin.cn");
}
點選執行,如果開啟了掘金網頁說明環境配置成功。
3 流程分析
1、進入搜尋頁面 , 搜尋框中輸入‘自動駕駛’
2、搜尋結果若出現登入浮窗,則關閉,將頁面中職位列表透過 class 擷取出來,儲存到資料庫
3、點選下一頁
4 寫到最後
當我們將 Selenium 作為爬蟲工具時,儘管它有很多優點,但也存在明顯的缺點。
Selenium 模擬瀏覽器動作,除了載入需要的資料外,還會載入圖片、JS、CSS等不必要的內容,導致網路資源和計算資源消耗增加,爬取速度變慢,爬取規模受限。
因此,長期大規模使用 Selenium 作為生產工具不是一個明智的選擇。
然而,如果只是想在個人電腦上快速抓取少量資料,Selenium 確實是一個非常方便的工具。
最後, crawler-boss 的原始碼實現非常簡單,假如同學們感興趣,可以關注公眾號,回覆 「爬蟲」即可獲取。
參考文件:
https://zhuanlan.zhihu.com/p/137710454
https://juejin.cn/post/7284318118993068051
如果我的文章對你有所幫助,還請幫忙點贊、在看、轉發一下,你的支援會激勵我輸出更高質量的文章,非常感謝!