手把手教你寫網絡爬蟲(2):迷你爬蟲架構-通用網絡爬蟲
介紹
大家好!回顧上一期,我們在介紹了爬蟲的基本概念之后,就利用各種工具橫沖直撞的完成了一個小爬蟲,目的就是猛、糙、快,方便初學者上手,建立信心。對于有一定基礎的讀者,請不要著急,以后我們會學習主流的開源框架,打造出一個強大專業的爬蟲系統!不過在此之前,要繼續打好基礎,本期我們先介紹爬蟲的種類,然后選取最典型的通用網絡爬蟲,為其設計一個迷你框架。有了自己對框架的思考后,再學習復雜的開源框架就有頭緒了。
今天我們會把更多的時間用在思考上,而不是一根筋的coding。用80%的時間思考,20%的時間敲鍵盤,這樣更有利于進步。
語言&環境
語言:帶足彈藥,繼續用Python開路!
一個迷你框架
下面以比較典型的通用爬蟲為例,分析其工程要點,設計并實現一個迷你框架。架構圖如下:
代碼結構:
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
url_table.py
Step 3. 記錄哪些網頁已經下載過的小本本——URL表。
在互聯網上,一個網頁可能被多個網頁中的超鏈接所指向。這樣在遍歷互聯網這張圖的時候,這個網頁可能被多次訪問到。為了防止一個網頁被下載和解析多次,需要一個URL表記錄哪些網頁已經下載過。再遇到這個網頁的時候,我們就可以跳過它。
crawl_thread.py
Step 5. 頁面分析模塊
從網頁中解析出URLs或者其他有用的數據。這個是上期重點介紹的,可以參考之前的代碼。
Step 6. 頁面存儲模塊
保存頁面的模塊,目前將文件保存為文件,以后可以擴展出多種存儲方式,如mysql,mongodb,hbase等等。
webpage_save.py
寫到這里,整個框架已經清晰的呈現在大家眼前了,千萬不要小看它,不管多么復雜的框架都是在這些基本要素上擴展出來的。
下一步
基礎知識的學習暫時告一段落,希望能夠幫助大家打下一定的基礎。下期開始為大家介紹強大成熟的爬蟲框架Scrapy,它提供了很多強大的特性來使得爬取更為簡單高效,更多精彩,敬請期待!