爬蟲原理詳解
雖說不同的爬蟲原理並不相同,但這些原理中還是會存在許多的共同之處;所以就以通用爬蟲和聚焦爬蟲講解爬蟲的實現原理
通用爬蟲
- 獲取初始的URL,初始URL地址可以由用戶直接決定,也可以由用戶指定的網頁決定
- 根據初始URL爬蟲頁面,爬取相應網頁後將網頁存儲到原始數據庫中,並將已爬取的URL地址存放到一個URL列表中,用於去重和判斷爬取的進程;在爬取過程中也會獲得新的URL,
- 將獲得的新URL放到URL隊列中
- 從URL隊列中讀取新的URL中,並根據新的URL爬取網頁,同時從新網頁獲取新的URL,並重覆上訴爬取過程。
- 滿足設定的停止條件後,停止爬取;若未設定停止條件,則會一直爬取到無法獲取到新的URL地址爲止。
聚焦爬蟲
因爲聚焦爬蟲有目的性,所以其對於網絡爬蟲來說,要增加目標的定義和過濾機制。
- 定義爬取目標
- 獲取初始URL
- 根據初始URL爬取頁面並獲得新URL
- 將新的URL過濾與爬取目標無關的鏈接;另外將已爬取的URL地址存放到URL列表,用於去重和判斷爬取的進展
- 將過濾後的鏈接放到URL隊列中
- 在URL隊列中,根據搜索算法確定URL優先級,並確定下一步爬取的URL地址
- 從下一步要爬取的URL地址中,讀取新的URL,然後從URL中爬取網頁,並重覆上述過程
- 滿足系統中停止條件或者無法獲取新URL時停止爬取
爬取策略
在爬蟲爬取網頁過程中,在待爬取URL隊列中,先爬取那個URL,後爬取那個URL是由爬取策略決定的。
爬取策略主要有深度優先爬取策略、廣度優先爬取策略、大站優先策略、反鏈策略、其他爬取策略等。下面用一個例子來講訴各個爬行策略
如圖,某個網站有1-6個網頁,不同的爬取策略爬取順序不同
- 深度優先爬取策略:爬取一個網頁一直順着該網頁的下層依次深入,爬取完後返回上一層進行爬取。
- 圖中網站按深度優先爬取策略的順序可以是:1→4→5→2→6→3
- 廣度優先爬取策略:爬取同一層次的網頁,爬取完後再深入下一層次。
- 圖中網站按廣度優先爬取策略的順序可以是:1→2→3→4→5→6
- 大站爬取策略:網站的網頁數多的就稱爲大站,按照大站爬取策略會優先爬取大站中的網頁URL地址
- 反鏈策略:反向鏈接數是該網頁被其他網頁指向的次數。按照反鏈策略,網站的反鏈數量越多,則該網站就會被郵箱爬取。
網頁更新策略
- 許多網站的網頁會經常更新,在我們爬取的時候也需要根據相應的策略對網站進行優先級排序,在優先記高的網頁更新後將優先爬取。
- 常見的爬取策略有用戶體驗策略,歷史數據策略,聚類分析策略
- 用戶體驗策略:在用戶通過搜索引擎查詢某個問題時,會出現許多網頁,但大部分用戶都只會用到排名前面的網頁。所以,在通常情況下,爬蟲服務器會優先更新排名靠前的網頁,這種策略就是用戶體驗策略
- 歷史數據策略:根據網站的歷史數據來確定對網頁更新的週期
- 聚類分析策略:將網頁分成不同的類,每類大多屬性相似,其更新頻率也相似,聚類完成後,我們對每類中網頁進行隨機抽取一個樣本,然後求出該樣本的平均值,用其作爲該類的更新頻率
網頁分析算法
在搜索引擎中,爬取到網頁後會將網頁存儲到服務器的原始數據庫中之後會對每個網頁通過網頁分析算法進行分析並排名,該排名即爲用戶檢索時的排名
-
基於用戶行爲的網頁分析算法
該算法裏,會根據用戶對網頁的訪問行爲對網頁進行評價,常見的是根據用戶對網頁的訪問頻率、訪問時長、用戶對網頁的單機率等進行中和評價。 -
基於網絡拓撲的網頁分析算法
該算法通過網頁的鏈接關係、結構關係等網頁數據來對網頁進行分析的,拓撲就是網絡結構關係。該算法可以分爲三種:基於網頁粒度的分析算法,基於網頁塊粒度的分析算法,基於網站粒度的分析算法。- 基於網頁粒度的分析算法:根據網頁之間的鏈接關係對網頁的權重進行分析並排名,常見的如谷歌的PageRank,HITS等。
- 基於網頁塊粒度的分析算法:根據網頁之間連接關係進行計算,但分析規則有所不同。通常來說,一個網頁會包含多個超鏈接,這些鏈接對網頁的重要程度是有不同層次的;根據這些外部鏈接的層次進行分析、排名網頁。
- 基於網站粒度的分析算法:我們不在具體的對每個網頁進行排名,而是劃分網站的層次或等級。對於基於網頁粒度的算法來說,更加簡單高效,同時精確度不如網頁粒度。
-
基於網絡內容的網頁分析算法
該算法會依據網頁的內容對網頁進行相應的評價
身份識別
在爬取網頁時,爬蟲需先訪問該網頁,此時爬蟲會告訴網頁的站長其爬蟲身份。網站管理者可以通過爬蟲告知的身份信息度爬蟲身份進行識別,我們稱該過程爲爬蟲的身份識別過程。
爬蟲在爬取網頁時,會通過http請求中User Agent字段告知自己的爬蟲身份。爬蟲在爬取網頁之前會根據該網頁的Robots.txt來確定可爬取的範圍。
實現爬蟲
在這裏先簡單介紹一個簡單爬蟲工具gooseeker。
-
直接搜索下載並註冊(一定要註冊)gooseeker,傻瓜式安裝後打開
-
在頂上搜索欄出輸入想爬取的網站,此處以爬取2345天氣網
http://tianqi.2345.com/today-57516.htm
-
點擊ms謀數臺
-
輸入需要爬取的網址,後按回車,等待網頁加載完畢
-
點擊彈出工作臺,如果工作臺未關閉的就跳過該步
-
創建命令規則並查重,直到不重複爲止。
顯示可用即可
-
創建規則
點擊新建
輸入名字確定即可
創好之後如下
-
右鍵點擊之前的名字→添加→包容,並命名你想爬取的內容,隨後在之前添加好的那個上添加,其後
定義好後點擊第一個並勾選上關鍵內容
-
點擊你想爬取的內容並在網頁標籤中找到text在謀數臺中查看是否是需要的屬性,是就在text處右鍵點擊並內容映射,選擇對應的名稱標記即可
-
點擊tianqi勾選啓用,如果出現問題,就按照之前的步驟檢查
-
使用樣例複製我們需要爬取的排行榜結構都是一樣的,我們上一步只是完成了第一名數據的抓取,想要抓取更多的評論就需要進行樣例複製。
找到包含整個數據的標籤右鍵點擊依次選擇第一個第二個
結果如圖
12. 點擊測試,獲取結果,