既然有人想抓取, 就會有人想防禦。 網路爬蟲在運行的過程中會遇到一些阻礙, 在業內稱之為 反爬蟲策略 我們來列出一些常見的。
URL管理器
爬蟲框架要處理很多的URL, 我們需要設計一個佇列存儲所有要處理的URL, 這種先進先出的資料結構非常符合這個需求。 將所有要下載的URL存儲在待處理佇列中, 每次下載會取出一個, 佇列中就會少一個。 我們知道有些URL的下載會有反爬蟲策略, 所以針對這些請求需要做一些特殊的設置,
基本特性
上面說了這麼多, 我們設計的爬蟲框架有以下幾個特性, 沒有做到大而全, 可以稱得上輕量迷你挺好用。
易於定制: 很多網站的下載頻率、流覽器要求是不同的, 爬蟲框架需要提供此處擴展配置
多執行緒下載: 當CPU核數多的時候多執行緒下載可以更快完成任務
支援 XPath 和 CSS 選擇器解析
架構圖
執行流程圖
首先,引擎從調度器中取出一個連結(URL)用於接下來的抓取
引擎把URL封裝成一個請求(Request)傳給下載器,下載器把資源下載下來,並封裝成應答包(Response)
然後,爬蟲解析Response
若是解析出實體(Item),則交給實體管道進行進一步的處理。
若是解析出的是連結(URL),則把URL交給Scheduler等待抓取
這段代碼中使用一個 Map 來存儲所有事件,提供兩個方法:註冊一個事件、執行某個事件。
阻塞佇列存儲請求回應
舉個栗子
設計好我們的爬蟲框架後來試一下吧,這個例子我們來爬取豆瓣電影的標題。豆瓣電影中有很多分類,我們可以選擇幾個作為開始抓取的 URL。
總結
設計一款爬蟲框架的基本要點在文中已經闡述,要做的更好還有很多細節需要打磨,比如分散式、容錯恢復、動態頁面抓取等問題。 歡迎在elves中提交你的意見。
謝謝閱讀!
如有侵權請聯繫小編刪除!
執行流程圖
首先,引擎從調度器中取出一個連結(URL)用於接下來的抓取
引擎把URL封裝成一個請求(Request)傳給下載器,下載器把資源下載下來,並封裝成應答包(Response)
然後,爬蟲解析Response
若是解析出實體(Item),則交給實體管道進行進一步的處理。
若是解析出的是連結(URL),則把URL交給Scheduler等待抓取
這段代碼中使用一個 Map 來存儲所有事件,提供兩個方法:註冊一個事件、執行某個事件。
阻塞佇列存儲請求回應
舉個栗子
設計好我們的爬蟲框架後來試一下吧,這個例子我們來爬取豆瓣電影的標題。豆瓣電影中有很多分類,我們可以選擇幾個作為開始抓取的 URL。
總結
設計一款爬蟲框架的基本要點在文中已經闡述,要做的更好還有很多細節需要打磨,比如分散式、容錯恢復、動態頁面抓取等問題。 歡迎在elves中提交你的意見。
謝謝閱讀!
如有侵權請聯繫小編刪除!