您的位置:首頁>正文

爬蟲框架是怎麼來的?神級程式師教你設計和實現一款爬蟲框架!

既然有人想抓取, 就會有人想防禦。 網路爬蟲在運行的過程中會遇到一些阻礙, 在業內稱之為 反爬蟲策略 我們來列出一些常見的。

2018需要更多案例, 視頻。 PDF, 以及同行交流, 加上無償解答?那就加群:103456743 所有的東西一切免費領取, 自行下載!

URL管理器

爬蟲框架要處理很多的URL, 我們需要設計一個佇列存儲所有要處理的URL, 這種先進先出的資料結構非常符合這個需求。 將所有要下載的URL存儲在待處理佇列中, 每次下載會取出一個, 佇列中就會少一個。 我們知道有些URL的下載會有反爬蟲策略, 所以針對這些請求需要做一些特殊的設置,

進而可以對URL進行封裝抽出 Request。

基本特性

上面說了這麼多, 我們設計的爬蟲框架有以下幾個特性, 沒有做到大而全, 可以稱得上輕量迷你挺好用。

易於定制: 很多網站的下載頻率、流覽器要求是不同的, 爬蟲框架需要提供此處擴展配置

多執行緒下載: 當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中提交你的意見。

謝謝閱讀!

如有侵權請聯繫小編刪除!

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示