寫了個簡單爬蟲,收集 Boss 直聘自動駕駛崗位
朋友想知道 Boss 直聘上關于自動駕駛的崗位有哪些 ,于是,筆者寫了一個簡單的爬蟲 crawler-boss ,將全國大城市相關崗位的信息收集起來。
這篇文章,筆者想分享爬蟲 crawler-boss 的設計思路。
圖片
一、基本原理 Selenium + chromedriver
對于很多動態渲染的網頁而言,想要抓取它的數據,就需要對網頁的 JS 代碼以及 Ajax 接口等進行分析。
而當 JS 代碼混亂,難以分析,Ajax 的接口又含有很多加密參數的時候,就非常難以直接找出規律,那么上述過程會花費大量的時間和精力。
圖片
上圖中, Boss 直聘接口參數比較多,筆者并不想花太多時間研究這些參數,于是筆者選擇了另一種方案:Selenium + chromedriver。
Selenium是 web 瀏覽器自動化測試的工具,它可以模擬用戶與所有主流瀏覽器之間的交互,比如點擊,輸入,抓取,拖拽等等。
由于網頁大多采用是 JavaScript 動態渲染,使得爬蟲返回的結果可能與用戶實際看到的網頁并不一致。我們看到的網頁可能是經過 Ajax 加載,或者是JavaScript以及其他算法計算后生成的。
因此,我們可以使用 Selenium直接模擬瀏覽器運行,我們肉眼看到的是什么樣,能夠抓取的數據就是什么樣。
二、安裝 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");
}
點擊運行,如果打開了掘金網頁說明環境配置成功。
三、流程分析
1、進入搜索頁面 , 搜索框中輸入‘自動駕駛’。
圖片
圖片
2、搜索結果若出現登錄浮窗,則關閉,將頁面中職位列表通過 class 截取出來,保存到數據庫。
圖片
圖片
3、點擊下一頁
圖片
圖片
四、爬蟲演示
執行完成之后,職位記錄表新增了接近 2000 條記錄。
圖片
五、寫到最后
當我們將 Selenium 作為爬蟲工具時,盡管它有很多優點,但也存在明顯的缺點。
Selenium 模擬瀏覽器動作,除了加載需要的數據外,還會加載圖片、JS、CSS等不必要的內容,導致網絡資源和計算資源消耗增加,爬取速度變慢,爬取規模受限。
因此,長期大規模使用 Selenium 作為生產工具不是一個明智的選擇。
然而,如果只是想在個人電腦上快速抓取少量數據,Selenium 確實是一個非常方便的工具。
最后, crawler-boss 的源碼實現非常簡單,假如同學們感興趣,可以關注公眾號,回復 「爬蟲」即可獲取。