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