1. 程式人生 > Python爬蟲入門教學 >01 網路爬蟲簡介

01 網路爬蟲簡介

圖片描述

圖片來源於網路

1. 爬蟲的定義

網路爬蟲(又稱為網頁蜘蛛,網路機器人,在 FOAF 社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。—— 百度百科定義 詳細定義參照

網註解: 爬蟲其實是一種自動化資訊採集程式或指令碼,可以方便的幫助大家獲得自己想要的特定資訊。比如說,像百度,谷歌等搜尋引擎,他們的背後重要的技術支撐就是爬蟲。當我們使用搜索引擎搜尋某一資訊的時候,展現在我們眼前的搜尋結果,就是爬蟲程式事先從全球資訊網裡爬取下來的。我們之所以稱之為爬蟲,只不過是對自動獲取全球資訊網的動作的形象比喻而已。

2. 爬蟲的流程架構

爬蟲大致的工作流程如下圖所示:首先獲取資料,然後對資料進行清洗和處理,最後對資料進行持久化儲存,以及後面的資料視覺化工作。後面的章節中,我們會按照這個流程,詳細的一一介紹。
圖片描述

爬蟲流程架構圖

3. 爬蟲的分類

爬蟲按照系統結構和實現技術,大致可以分為以下幾種型別:

3.1 通用網路爬蟲(General Purpose Web Crawler)

通用爬蟲,主要是指谷歌,百度等搜尋引擎。它們爬取的範圍廣,種類多,儲存的資訊量大,對技術的要求比較高。

3.2 聚焦網路爬蟲(Focused Web Crawler)

聚焦爬蟲,主要是根據特定的主題進行爬取。這是大家最長使用的爬蟲種類。比如,我們爬取金融類的,或者電影,圖書之類的特定資訊。由於我們限定了主題和網站,可以極大的節省我們的硬碟和網路資源,更好的滿足特定業務的需求。

3.3 增量式網路爬蟲(Incremental Web Crawle)

增量爬蟲,主要是指我們在週期性的爬取一些網站的時候,只是僅僅爬取網站變更的內容,而不是把所有網站資料重新爬取一遍。這樣,可以有效的降低運維成本。

3.4 深層網路爬蟲(Deep Web Crawler)

深層網路爬蟲,主要是指我們不能直接爬取的一些網站。比如,這些網站需要使用者登陸,或者填寫一些特定的表單,才能繼續深入爬取資訊。

Tips : 其實在實際的專案中,我們通常會將兩種甚至多種爬蟲技術相結合來使用,以達到更好的效果。

4. 爬蟲的抓取策略

爬蟲根據業務需求的不同可以大致分為兩種不同的抓取策略:

4.1 深度優先策略

深度優先策略是指爬蟲在爬取一個 HTML 頁面的時候,如果發現頁面中有新的 URL,將對這個新的 URL 進行深度優先搜尋,以此類推,一直沿著 URL 進行爬取,直到不能深入為止。然後,返回到上一次的 URL 地址,尋找其他 URL 進行搜尋,當頁面中沒有新的 URL 可以供選擇的時候,說明搜尋已經結束。

舉一個簡單的例子,比如,我們訪問網,假設網首頁只有兩個課程連結,一個是爬蟲課,另一個是 Python 課,深度優先演算法就是先進入到爬蟲課中,然後再進入到爬蟲課的一個章節連結中,如果這個章節裡沒有了子章節,爬蟲就會退到上一層,從另一個沒有訪問過的章節繼續訪問,所有章節都訪問完了,爬蟲會退回到首頁,對 Python 課連結也執行相應的搜尋,直到無法找到新的 URL 進行搜尋而結束。

4.2 廣度優先策略

廣度優先策略是指爬蟲需要爬取完整個 web 頁面的所有 URL 後,才能繼續到下一個的頁面進行搜尋,直到底層為止。

還是上面我們的網的例子,來到網首頁之後我們需要獲取到網首頁的 Python 課和爬蟲課的URL 後,才能繼續對這兩個課的子章節的 URL 進行搜尋,然後一層一層的進行下去,直到結束。

Tips:深度優先適合搜尋網站巢狀比較深的網站,而廣度優先策略更適用於對時間要求比較高,且網站頁面同層次 URL 比較多的頁面。

5. 爬蟲的學習基礎

學習爬蟲,我們需要如下的基礎知識:

  • Python 語言基礎
  • 資料庫基礎知識

如果大家還沒有 Python 語言或者資料庫的基礎,可以參考網相關的 wiki 進行學習。

當然,為了方便大家理解,我會在程式碼中加入詳細的註釋,即使大家沒有 Python 語言基礎,也可以先理解大致流程,然後查漏補缺,學習相應的知識。

有些同學也許會疑惑,為什麼開發爬蟲一定要使用python語言呢,其他語言不可以嗎?

這就不得不說 Python 的第三方的庫了,Python 之所以那麼流行,正式因為它有非常多的庫,且這些庫效能和使用都比較簡潔高效,配合著 Python 語言本身的高效,僅僅需要 10 行程式碼左右就可實現一個簡單的爬蟲,而用 java/C/C++ 等其他語言,至少要寫幾十行程式碼,因此,使用 Python 開發爬蟲程式贏得了眾多程式設計師的青睞。

舉個例子,比如,大家習慣了在樓下的便利店買飲料喝,雖然門口一公里外有更大的超市,我相信你也不願意去買,因為太麻煩不夠便利。這正是 Python 語言成為爬蟲屆的主流語言的精髓所在。

後面的學習中,我們會用到幾個 Python 的第三方庫,所謂第三方庫,指的是相對於 Python 的官方庫而言(例如,系統“os”,時間“time”等庫\),由非官方釋出的庫,如 requests 等庫,我們稱之為第三方庫。

Python 的官方庫在安裝 Python 直譯器的時候已經預設安裝好了,而第三方庫需要我們去手動安裝。例如我們在爬蟲開發中會經常用到的 Requests 庫。安裝第三方庫非常的簡單,只需要在終端中執行下面這條命令即可:

pip install requests

後面,再講到具體的庫的時候,還會進行詳細的介紹。

下面列舉了一下爬蟲開發中常用的 Python 的庫的對比:

簡介
urllib python自帶的庫,不需要安裝。 但是,urlib 在不同的 python 版本中,存在明細的區別,在實際開發中,太過繁瑣,而且無法對 header 偽裝,容易被封掉,所以,現在使用的人數不是很多。
requests 與 urllib 相比,不僅具備了 url 的所用功能,更重要的的語法簡潔優雅,而且,在相容上, 完全相容python2 和 python3,非常方便。 同時,它也可以對請求進行偽裝。
urllib3 urllib3 庫提供一些 urllib 沒有的重要特性,比如說執行緒安全,連線池,支援壓縮編碼等。

這裡推薦使用 requests 庫,簡單方便,上手容易,對於使用爬蟲的新手來說,非常的合適。如果沒有特殊說明,我們後面的課程預設使用 requests 庫。

6. 爬蟲的法律和道德問題

最近幾年,因為編寫爬蟲程式大量抓取資料獲利的程式設計師可以說是層出不窮。大家可能會擔心自己在使用爬蟲的過程中會不會違法。其實,大家只要合理的使用爬蟲,是不會輕易觸犯法律的。那麼,怎樣才算是合理使用爬蟲呢,我總結了以下三點供大家參考:

  • 不能通過爬蟲,高頻率高併發的對特定網站進行攻擊,導致目標網站崩潰;
  • 在爬取網站公共資料的時候,如果想把大資料用作商業用途,需要請專業的法務對網站的協議和宣告進行分析確認後再使用;
  • 如果通過爬蟲訪問一些不是公開的資源資料,比如需要特定賬號和密碼登陸的網站,然後把資料公開出去,這些大部分都是違法的,即使是使用自己的賬號密碼登陸。

拋開法律層面,我們也要嚴於律己,遵守一些特定的規則辦事。我這裡想講的就是爬蟲界的 robots 協議。這個是網站所有者,針對爬蟲而設計的協議,通常位於網站的根目錄下面。它規定了哪些目錄可以爬取,哪些不可以。我們需要遵守這項約定的協議,以避免造成不必要的麻煩。

7. 個人經驗

在實際的工作專案中,如果我們是做爬蟲工作的工程師,在熟練掌握基本的爬蟲技術的同時,還應該去熟悉和了解資料清洗和處理技術,只有這樣,我們才能更好的與團隊進行協作。當然,這些技術,在後面的章節裡,我也會一一跟大家進行介紹。

好了,讓我們開啟爬蟲世界的歡樂旅途吧!