爬蟲larbin執行過程

2021-06-04 23:01:30 字數 1500 閱讀 8215

八大部分:分別為url 庫,dns 解析,連線處理,i/o 復用,檔案排重,robots 解析,解析html 檔案和儲存html 檔案

執行過程:

1. 執行配置檔案

解析larbin.conf 檔案,也就是自定義的配置檔案,在此檔案中會得到要抓取的種子節點將其存入url 庫中。

url 庫模組的實現是通過persistentfifo 類來完成的,其主要作用是存放新分析出來的url。

2. url的dns解析

隨後把需要進行dns 解析的url 從url 庫中調入記憶體,網域名稱解析這一部分是通過namesite 類來實現的。解析完畢後ip 位址回存到記憶體佇列中

3. 發起連線

connexion類進行連線處理。

if 初次請求 then某主機需要先請求robots 檔案

else可以直接請求url,對此類站點larbin 使用ipsite類進行處理,該類主要負責填寫需要請求的url 位址並對伺服器發起請求報文

4. i/o多路復用式請求

套接字設定為非阻塞狀態,這時larbin 不會等待應答而是選用了poll 系統函

數將連線設定為阻塞狀態繼續取出下乙個conextions 物件填寫請求報文發起http 請求。

當所有物件取畢後,利用poll函式得出一組連線狀態的遮蔽字,可以分辨出當前哪個連線已被啟用,從而對當前啟用連線進行處理。

5. 檔案排重

處理應答報文時,首先對內容進行檔案排重處理,larbin 使用hashdup 類來處理這一部分。

if 重複 then 丟棄

else 使用file類進行解析           

6. 對內容進行解析

file類處理對檔案的解析會派生出如下兩個類:

robots類,用於解析robots檔案。爬蟲必須遵守robots 協議,所以一般對乙個新站點來說首次請求的是robots 檔案,將對robots 檔案進行解析。

if 不想被抓取 放到記錄禁止url的forbidden陣列中

else 進行解析html檔案

html類:把新分析出來的url 提取後將html 檔案儲存到外存上,這樣一張完整的頁面就抓取到

1. 深度判斷

if  新分析出的url 與該網頁url 擁有相同的網域名稱,則將新url 鏈結深度加1

else  將url深度值置為初始值1

2. url過濾 檢視url是否可抓取

通過與forbidden陣列中的url對比

if 相同 then 不可抓取

else 隨意抓取  

3. url排重

由於超文字文件結構的特殊性如果沒有url 排重處理的話,抓取到的網頁冗餘是不可估量的,通過hashtable 類對url 進行排重處理。

有兩類的重複一是由於超連結的原因,很可能會出現不同的網頁包含相同的url,發生了url 重複。二是由於伺服器映象的原因,會產生兩個不同的**指向相同的內容,發生了文件重複。

通過以上三個環節的處理剩餘的url存入url 庫中作為擴充套件抓取的url 源

7. 儲存html檔案

larbin編譯 執行與配置

命令列sudo apt get install softname 安裝gcc g make xutils dev 1 開啟.adns internal.h檔案,把568 571行直接注釋掉就行了。或者 adns資料夾下internal.h檔案569 571 adns status adns pars...

網路爬蟲Larbin的學習(三) 整體架構

這一回開始對larbin的源 進行學習。經過一段時間的學習,我發現larbin的架構還是不錯的。而且他的架構中使用到了許多技術,在閱讀源 的過程中也可以撿起以前學過的東西。進入 larbin home src,我們可以看到許多原始檔,這些原始檔主要分為兩大類 1 主控類 main.cc 主控程式,排...

Scrapy 執行多個爬蟲

本文所使用的 scrapy 版本 scrapy 1.8.0 多個爬蟲 所有爬蟲 顯然,這兩種情況並不一定是等同的。假設當前專案下有 3 個爬蟲,分別名為 route dining experience,並在專案目錄下建立乙個main.py檔案,下面的示例 都寫在這個檔案中,專案執行時,在命令列下執行...