1. 程式人生 > 程式設計 >爬蟲的介紹

爬蟲的介紹

作為程式設計師,相信大家對“爬蟲”這個詞並不陌生,身邊常常會有人提這個詞,在不瞭解它的人眼中,會覺得這個技術很高階很神祕。不用著急,我們的爬蟲系列就是帶你去揭開它的神祕面紗,探尋它真實的面目。

爬蟲是什麼

網路爬蟲(又被稱為網頁蜘蛛,網路機器人),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。

通俗地講,我們把網際網路比作一張大蜘蛛網,每個站點資源比作蜘蛛網上的一個結點,爬蟲就像一隻蜘蛛,按照設計好的路線和規則在這張蜘蛛網上找到目標結點,獲取資源。

為什麼使用爬蟲

為什麼我們需要使用爬蟲呢?

大家可以想象一下一個場景:你非常崇拜一個微博名人,對他的微博非常著迷,你想把他十年來微博上的每一句話摘抄下來,製作成名人語錄。這個時候你怎麼辦呢?手動去 Ctrl+C 和 Ctrl+V 嗎?這種方法確實沒錯,資料量小的時候我們還可以這樣做,但是資料成千上萬的時候你還要這樣做嗎?

我們再來想象另一個場景:你要做一個新聞聚合網站,每天需要定時去幾個新聞網站獲取最新的新聞,我們稱之為 RSS 訂閱。難道你會定時去各個訂閱網站複製新聞嗎?恐怕個人很難做到這一點吧。

上面兩種場景,使用爬蟲技術可以很輕易地解決問題。所以,我們可以看到,爬蟲技術主要可以幫助我們做兩類事情:一類是資料獲取需求,主要針對特定規則下的大資料量的資訊獲取;另一類是自動化需求,主要應用在類似資訊聚合、搜尋等方面。

爬蟲的分類

從爬取物件來看,爬蟲可以分為通用爬蟲和聚焦爬蟲兩類。

通用網路爬蟲又稱全網爬蟲(Scalable Web Crawler),爬行物件從一些種子 URL 擴充到整個 Web,主要為搜尋引擎和大型 Web 服務提供商採集資料。這類網路爬蟲的爬取範圍和數量巨大,對於爬行速度和儲存空間要求較高,對於爬行頁面的順序要求相對較低。例如我們常見的百度和谷歌搜尋。我們輸入關鍵詞,它們會從全網去找關鍵詞相關的網頁,並且按照一定的順序呈現給我們。

聚焦網路爬蟲(Focused Crawler),是指選擇性地爬取那些與預先定義好的主題相關頁面的網路爬蟲。和通用網路爬蟲相比,聚焦爬蟲只需要爬取特定的網頁,爬取的廣度會小很多。例如我們需要爬取東方財富網的基金資料,我們只需要針對東方財富網的頁面制定規則爬取就行。

通俗地講,通用爬蟲就類似於一隻蜘蛛,需要尋找特定的食物,但是它不知道蜘蛛網的哪個節點有,所以它只能從一個節點開始尋找,遇到節點就看一下,如果有食物就獲取食物,如果這個節點指示某某節點有食物,那它就順著指示去尋找下個節點。而聚焦網路爬蟲就是這隻蜘蛛知道哪個節點有食物,它只需要規劃好路線到達那個節點就能獲取到食物。

瀏覽網頁的過程

在使用者瀏覽網頁的過程中,我們可能會看到許多好看的圖片,比如

image.baidu.com/ ,我們會看到幾張圖片以及百度搜索框,類似下面圖片這樣:

baidu_pic_index

這個過程其實就是使用者輸入網址之後,經過DNS伺服器,找到伺服器主機,向伺服器發出一個請求,伺服器經過解析之後,傳送給使用者的瀏覽器 HTML、JS、CSS 等檔案,瀏覽器解析出來,使用者便可以看到形形色色的圖片了。

因此,使用者看到的網頁實質是由 HTML 程式碼構成的,爬蟲爬來的便是這些內容,通過分析和過濾這些 HTML 程式碼,實現對圖片、文字等資源的獲取。

URL的含義

URL,即統一資源定位符,也就是我們說的網址,統一資源定位符是對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示,是網際網路上標準資源的地址。網際網路上的每個檔案都有一個唯一的URL,它包含的資訊指出檔案的位置以及瀏覽器應該怎麼處理它。

URL 的格式由三部分組成:
①第一部分是協議(或稱為服務方式)。
②第二部分是存有該資源的主機IP地址(有時也包括埠號)。
③第三部分是主機資源的具體地址,如目錄和檔名等。
複製程式碼

由於爬蟲的目標是獲取資源,而資源都儲存在某個主機上,所以爬蟲爬取資料時必須要有一個目標的 URL 才可以獲取資料,因此,它是爬蟲獲取資料的基本依據,準確理解它的含義對爬蟲學習有很大幫助。

爬蟲的流程

我們接下來的篇章主要討論聚焦爬蟲,聚焦爬蟲的工作流程如下圖:

spider_flow

①首先我們需要有一個種子 URL 佇列,這個佇列中的 URL 相當於我們蜘蛛爬行的第一個結點,是我們在大網中爬行的第一步。
②對佇列中的每一個 URL 進行請求,我們會得到響應內容,通常響應內容為HTML。如果響應內容裡面有我們的目標 URL,提取出來加入 URL 佇列中。
③解析響應內容,提取我們需要的資料。
④儲存資料,我們可以將資料儲存到資料庫、檔案等。
複製程式碼

從這個爬蟲的流程來看,大家應該能夠聯想到學習爬蟲需要學習的關鍵步驟。首先我們需要像瀏覽器一樣請求某個 URL ,來獲取某個主機的資源,那麼請求的方法和正確地獲取內容就是我們學習的重點。我們獲取到資源(也就是請求 URL 之後獲得的響應內容)之後,我們需要對響應的內容進行解析,從而獲取到對我們有價值的資料,這裡面的解析方法就是學習的重點了。我們獲取到資料之後,接下來就需要儲存資料了,資料的儲存方法也很重要。

所以我們學習的爬蟲技術,實際上可以歸納為請求解析儲存三個基本問題。熟練掌握這三個問題對應的解決方法,爬蟲技術就算是掌握了。大家在學習爬蟲的過程中,緊緊圍繞這三個問題展開,就不會走彎路了。

總結

本節給大家介紹了爬蟲的基本概念,讓大家對爬蟲有一個大致的瞭解,以便後續章節的學習。開胃菜吃完了,下一節我們就要開始吃大餐了喲,你準備好了嗎?