您的位置:首頁>正文

神級程式師帶你玩爬蟲!從零到迷你爬蟲架構!十分鐘就夠了!

語言&環境

語言:帶足彈藥, 繼續用Python開路!

爬蟲的種類

聚焦網路爬蟲

聚焦網路爬蟲(Focused Crawler), 又稱主題網路爬蟲(Topical Crawler), 是指選擇性地爬取那些與預先定義好的主題相關頁面的網路爬蟲。 和通用網路爬蟲相比, 聚焦爬蟲只需要爬取與主題相關的頁面, 極大地節省了硬體和網路資源, 保存的頁面也由於數量少而更新快, 還可以很好地滿足一些特定人群對特定領域資訊的需求。 我們之前爬的歌單就屬於這一種。

增量式網路爬蟲

增量式網路爬蟲(Incremental Web Crawler)是 指 對 已 下 載 網 頁 采 取 增 量式更新和只爬取新產生的或者已經發生變化網頁的爬蟲,

它能夠在一定程度上保證所爬取的頁面是盡可能新的頁面。 和週期性爬取和刷新頁面的網路爬蟲相比, 增量式爬蟲只會在需要的時候爬取新產生或發生更新的頁面 , 並不重新下載沒有發生變化的頁面, 可有效減少資料下載量, 及時更新已爬取的網頁, 減小時間和空間上的耗費, 但是增加了爬取演算法的複雜度和實現難度。 現在比較火的輿情爬蟲一般都是增量式網路爬蟲。

深網爬蟲

Web 頁面按存在方式可以分為表層網頁(Surface Web)和深層網頁(Deep Web, 也稱 Invisible Web Pages 或 Hidden Web)。 表層網頁是指傳統搜尋引擎可以索引的頁面, 以超連結可以到達的靜態網頁為主構成的 Web 頁面。 Deep Web 是那些大部分內容不能通過靜態連結獲取的、隱藏在搜索表單後的,

只有使用者提交一些關鍵字才能獲得的 Web 頁面。 例如那些使用者註冊後內容才可見的網頁就屬於 Deep Web。

一個迷你框架

下面以比較典型的通用爬蟲為例, 分析其工程要點, 設計並實現一個迷你框架。 架構圖如下:

代碼結構:

config_load.py 設定檔載入

crawl_thread.py 爬取執行緒

mini_spider.py 主執行緒

spider.conf 設定檔

url_table.py url佇列、url表

urls.txt 種子url集合

webpage_parse.py 網頁分析

webpage_save.py 網頁存儲

看看設定檔裡有什麼內容:

spider.conf

mini_spider.py

url_table.py

Step 3. 記錄哪些網頁已經下載過的小本本——URL表。

在互聯網上,一個網頁可能被多個網頁中的超連結所指向。這樣在遍歷互聯網這張圖的時候,這個網頁可能被多次訪問到。為了防止一個網頁被下載和解析多次,需要一個URL表記錄哪些網頁已經下載過。再遇到這個網頁的時候,我們就可以跳過它。

crawl_thread.py

Step 4. 多個抓取執行緒

為了提升爬蟲性能,需要多個抓取執行緒,從URL佇列獲取連結進行處理。多執行緒並沒什麼毛病,但Python的多執行緒可能會引起很多人的質疑,這源於Python設計之初的考慮:GIL。GIL的全稱是Global Interpreter Lock(全域解譯器鎖),某個執行緒想要執行,必須先拿到GIL,並且在一個Python進程中,GIL只有一個。結果就是Python裡一個進程永遠只能同時執行一個執行緒,這就是為什麼在多核CPU上,Python的多執行緒效率並不高。那麼我們為什麼還要用Python多執行緒呢?

crawl_thread.py

Step 5. 頁面分析模組

從網頁中解析出URLs或者其他有用的資料。這個是上期重點介紹的,可以參考之前的代碼。

Step 6. 頁面存儲模組

保存頁面的模組,目前將檔保存為檔,以後可以擴展出多種存儲方式,如mysql,mongodb,hbase等等。

webpage_save.py

寫到這裡,整個框架已經清晰的呈現在大家眼前了,千萬不要小看它,不管多麼複雜的框架都是在這些基本要素上擴展出來的。

下一步

基礎知識的學習暫時告一段落,希望能夠幫助大家打下一定的基礎。下期開始為大家介紹強大成熟的爬蟲框架Scrapy,它提供了很多強大的特性來使得爬取更為簡單高效,更多精彩,敬請期待!

crawl_thread.py 爬取執行緒

mini_spider.py 主執行緒

spider.conf 設定檔

url_table.py url佇列、url表

urls.txt 種子url集合

webpage_parse.py 網頁分析

webpage_save.py 網頁存儲

看看設定檔裡有什麼內容:

spider.conf

mini_spider.py

url_table.py

Step 3. 記錄哪些網頁已經下載過的小本本——URL表。

在互聯網上,一個網頁可能被多個網頁中的超連結所指向。這樣在遍歷互聯網這張圖的時候,這個網頁可能被多次訪問到。為了防止一個網頁被下載和解析多次,需要一個URL表記錄哪些網頁已經下載過。再遇到這個網頁的時候,我們就可以跳過它。

crawl_thread.py

Step 4. 多個抓取執行緒

為了提升爬蟲性能,需要多個抓取執行緒,從URL佇列獲取連結進行處理。多執行緒並沒什麼毛病,但Python的多執行緒可能會引起很多人的質疑,這源於Python設計之初的考慮:GIL。GIL的全稱是Global Interpreter Lock(全域解譯器鎖),某個執行緒想要執行,必須先拿到GIL,並且在一個Python進程中,GIL只有一個。結果就是Python裡一個進程永遠只能同時執行一個執行緒,這就是為什麼在多核CPU上,Python的多執行緒效率並不高。那麼我們為什麼還要用Python多執行緒呢?

crawl_thread.py

Step 5. 頁面分析模組

從網頁中解析出URLs或者其他有用的資料。這個是上期重點介紹的,可以參考之前的代碼。

Step 6. 頁面存儲模組

保存頁面的模組,目前將檔保存為檔,以後可以擴展出多種存儲方式,如mysql,mongodb,hbase等等。

webpage_save.py

寫到這裡,整個框架已經清晰的呈現在大家眼前了,千萬不要小看它,不管多麼複雜的框架都是在這些基本要素上擴展出來的。

下一步

基礎知識的學習暫時告一段落,希望能夠幫助大家打下一定的基礎。下期開始為大家介紹強大成熟的爬蟲框架Scrapy,它提供了很多強大的特性來使得爬取更為簡單高效,更多精彩,敬請期待!

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