[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

MarvinZhang發表於2019-05-27

⚠注意: 可配置爬蟲現在僅在Python版本(v0.2.1-v0.2.4)可用,在最新版本Golang版本(v0.3.0)還暫時不可用,後續會加上,請關注近期更新

前言

開發爬蟲是一件有趣的事情。寫一個程式,對感興趣的目標網站發起HTTP請求,獲取HTML,解析HTML,提取資料,將資料儲存到資料庫或者存為CSV、JSON等格式,再用自己熟悉的語言例如Python對這些資料進行分析生成酷炫的圖表。這個過程是不是很興奮?

然而,開發爬蟲並不是一件簡單的事情。通常開發一個簡單爬蟲往往需要編寫好幾個模組:下載器、解析器、提取規則、儲存模組。實現這個簡單爬蟲用Python實現至少需要編寫10-20行程式碼,而且如果考慮併發和排程的話,通常要編寫50行程式碼以上。更麻煩的是,如果要管理多個爬蟲實現爬蟲的工程化,需要對各個網站的爬蟲程式碼提取共用模組和引數,這個過程需要相當的工程經驗和時間積累。其實,一般各大網站的結構大同小異,僅需要更改提取規則即可。很多爬蟲工程師要在大型專案中編寫成百上千的提取規則,對於沒有任何管理工具的人來說,這基本上是個噩夢。

可配置爬蟲

幸運的是,Crawlab版本v0.2.1中新增功能可配置爬蟲可以讓工程師從這些重複性工作中解放開來。Crawlab的可配置爬蟲只需要爬蟲工程師配置一些必要的CSS/XPath提取規則,就可以完成一個常規的爬蟲開發。根據作者實驗,對於CSS選擇器或XPath稍微熟悉點的工程師,用可配置爬蟲開發完一個包含五臟俱全的常規爬蟲只需要1-3分鐘。

Crawlab的可配置爬蟲是基於Scrapy的,因此天生是支援併發的。而且,可配置爬蟲完全支援Crawlab自定義爬蟲的一般功能的,因此也支援任務排程、任務監控、日誌監控、資料分析。

安裝執行Crawlab

Crawlab是一個專注於爬蟲的整合了爬蟲管理、任務排程、任務監控、資料分析等模組的分散式爬蟲管理平臺,非常適合對爬蟲管理、爬蟲工程化有要求的開發者及企業。

關於Crawlab的詳細介紹請參考之前的文章:

以下是Crawlab的安裝和執行步驟,時間大概在10-20分鐘。

安裝步驟

執行步驟

如何開發並執行可配置爬蟲

下面總算到了爬蟲開發時間。這裡將以網易24小時排行新聞為例,開發一個相應的可配置爬蟲,整個流程應該不超過3分鐘。

新增爬蟲

Crawlab跑起來之後,在瀏覽器中開啟網址http://localhost:8080,導航到爬蟲。在點選新增爬蟲按鈕。

爬蟲列表

點選可配置爬蟲

爬蟲列表-新增爬蟲

輸入完基本資訊,點選新增

爬蟲列表-爬蟲資訊

配置爬蟲

新增完成後,可以看到剛剛新增的可配置爬蟲出現了在最下方,點選檢視進入到爬蟲詳情

[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

點選配置標籤進入到配置頁面。接下來,我們需要對爬蟲規則進行配置。

[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

這裡已經有一些配置好的初始輸入項。我們簡單介紹一下各自的含義。

抓取類別

這也是爬蟲抓取採用的策略,也就是爬蟲遍歷網頁是如何進行的。作為第一個版本,我們有僅列表僅詳情頁列表+詳情頁

  • 僅列表頁。這也是最簡單的形式,爬蟲遍歷列表上的列表項,將資料抓取下來。
  • 僅詳情頁。爬蟲只抓取詳情頁。
  • 列表+詳情頁。爬蟲先遍歷列表頁,將列表項中的詳情頁地址提取出來並跟進抓取詳情頁。

這裡我們選擇列表+詳情頁

列表項選擇器 & 分頁選擇器

列表項的匹和分頁按鈕的匹配查詢,由CSS或XPath來進行匹配。

開始URL

爬蟲最開始遍歷的網址。

遵守Robots協議

這個預設是開啟的。如果開啟,爬蟲將先抓取網站的robots.txt並判斷頁面是否可抓;否則,不會對此進行驗證。使用者可以選擇將其關閉。請注意,任何無視Robots協議的行為都有法律風險。

列表頁欄位 & 詳情頁欄位

這些都是再列表頁或詳情頁中需要提取的欄位。欄位由CSS選擇器或者XPath來匹配提取。可以選擇文字或者屬性。

在檢查完目標網頁的元素CSS選擇器之後,我們輸入列表項選擇器、開始URL、列表頁/詳情頁等資訊。注意勾選url為詳情頁URL。

[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

點選儲存、預覽,檢視預覽內容。

[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

OK,現在配置大功告成,終於可開始跑爬蟲了!

執行爬蟲

你唯一需要做的,就是點選執行按鈕並確認。點選概覽標籤,你可以看到任務已經開始執行了。

[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

點選建立時間連結導航到任務詳情,點選結果標籤,你就可以看到抓取到的結果已經儲存下來了。

[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

怎麼樣,這個過程是不是超級簡單?如果熟練的話,整個過程可以在60秒內完成!就跟玩魔方一樣,越玩越熟練!

結語

本文利用Crawlab的可配置爬蟲功能實現了3分鐘內對網易新聞24小時新聞排行榜的抓取。同樣的過程可以實現在其他類似的網站上面。雖然這是一個經典的“列表+詳情頁”的抓取模式,比較簡單,後續我們還會開發更多的更復雜的抓取模式,實現更多的抓取需求。Crawlab的可配置爬蟲降低了爬蟲的開發時間,增加了爬蟲開發效率,完善了工程化水平,將爬蟲工程師從日常的繁瑣配置工作中解放出來。配置工作可以交給初級爬蟲工程師或者外包人員來做,而高階爬蟲工程師會把精力放在更復雜的爬蟲工作上來,例如反爬、動態內容、分散式爬蟲等等。

Github: tikazyq/crawlab

如果感覺Crawlab還不錯,對你的日常工作或企業有幫助的話,請加作者微信拉入開發交流群,大家一起交流關於Crawlab的使用和開發。

[爬蟲手記] 我是如何在3分鐘內開發完一個爬蟲的

相關文章