摘要:趁著春節(jié),希望能寫一個小小的網(wǎng)絡(luò)爬蟲框架。網(wǎng)頁下載器接收,將頁面內(nèi)容下來??梢远x一個表,定義兩個字段和緩存數(shù)據(jù)庫網(wǎng)頁下載器網(wǎng)頁下載器就是更具下載網(wǎng)頁內(nèi)容等。常見的網(wǎng)頁下載器有是官方的基礎(chǔ)模塊。
趁著春節(jié),希望能寫一個小小的網(wǎng)絡(luò)爬蟲框架。
先定一個小目標,希望能比較優(yōu)雅地將某個網(wǎng)站上的所有圖片爬下來。
暫時先將這個爬蟲的名字叫做Squirrel,小松鼠吧。
爬蟲其實是一種從互聯(lián)網(wǎng)上獲取信息,并且提取我們需要的信息并且儲存的手段。
互聯(lián)網(wǎng)就像一張網(wǎng),這種網(wǎng)是由一個個url相互連接的。一個url往往是對應(yīng)著一張網(wǎng)頁(Page). 各個頁面通過url鏈接成了一個網(wǎng)狀結(jié)構(gòu)。
那么我們從一個頁面出發(fā),分析其中的url,然后再去訪問該url對應(yīng)的頁面;再分析其中的url,并訪問。如此重復(fù)并可以爬遍所有的頁面。
簡單地捋了一下,我們?nèi)绻枰獙崿F(xiàn)一只爬蟲,則需要實現(xiàn)如下幾個功能模塊:
url管理器
url管理器應(yīng)該維護兩個不重復(fù)的set。一個儲存未爬過的url,一個儲存已經(jīng)爬過的url。如果我們要將一個url加入未爬過的url set,那么這個url必須都不在兩組set中。
網(wǎng)頁下載器
接收url,將頁面內(nèi)容下來。
網(wǎng)頁解析器
接收頁面內(nèi)容,從中提取出結(jié)構(gòu)化的數(shù)據(jù)和url。
儲存器
儲存結(jié)構(gòu)化的數(shù)據(jù)。
下面我們一步一步來認識我們設(shè)置的幾個模塊需要實現(xiàn)什么功能。
url管理器url管理器主要需要維護兩個集合:
已經(jīng)抓取的url集合,我們叫做crawled_set
未抓取的url集合,我們叫做uncrawled_set
目的就是為了防止重復(fù)抓取和循環(huán)抓取。
我們來分解url管理器需要實現(xiàn)的功能:
判斷一個url是否已經(jīng)在容器中
判斷uncrawled_set中是否為空。為空則停止爬取。
將一個url添加到容器的uncrawled_set中
將一個url從uncrawled_set移動到crawled_set中。
url管理器的實現(xiàn)方式有多種
將crawled_set和uncrawed_set存放在內(nèi)存中。
Python支持set數(shù)據(jù)類型,可以建立兩個set用來存放未爬和已爬url。
關(guān)系型數(shù)據(jù)庫。
可以定義一個表,定義兩個字段 url和is_crawled.
緩存數(shù)據(jù)庫 redis
網(wǎng)頁下載器網(wǎng)頁下載器就是更具url下載網(wǎng)頁內(nèi)容(html等)。
常見的網(wǎng)頁下載器有
-urllib2
urllib2是python官方的基礎(chǔ)模塊。
-request
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38385.html
摘要:申明本系列文章借鑒了慕課網(wǎng)的課程,。慕課網(wǎng)是一個非常贊的學習網(wǎng)站。是下的一個模塊,在中,被拆分成和實現(xiàn)一個最簡單的下載器使用函數(shù)可以給服務(wù)器發(fā)送一個請求。該函數(shù)返回一個該返回的對象有三個額外的函數(shù)取得服務(wù)器返回的。默認沒有的,請求方式為。 申明:本系列文章借鑒了慕課網(wǎng)的課程,http://www.imooc.com/learn/563。慕課網(wǎng)是一個非常贊的學習網(wǎng)站。 urllib2是p...
摘要:設(shè)置和處理事實上,并不是所有發(fā)起的請求都能得到服務(wù)器的回應(yīng)。例如網(wǎng)絡(luò)無鏈接連接不到服務(wù)器鏈接不存在請求的方法不對等情況都會造成拋出錯誤。上面說到的出錯就會拋出。用于處理相關(guān)的錯誤。 urllib2的timeout timeout參數(shù)用于設(shè)置超時。我們在爬取一些響應(yīng)較慢的網(wǎng)站的時候,需要設(shè)置一個比較長的超時時間。 response = urllib2.urlopen(request, t...
摘要:發(fā)送請求方不希望被跟蹤。主要用來將偽裝成一個正常的瀏覽器。該字典就是說是網(wǎng)絡(luò)協(xié)議名稱,是代理的。另外一般會明確指定資源存放的位置。意思是將現(xiàn)在提交的數(shù)據(jù)存放于下第篇。請求刪除某一個資源。向服務(wù)器提交數(shù)據(jù)。 前一個教程我們涉及到了urllib2的一些高級應(yīng)用。這一片文章我們來比較系統(tǒng)的介紹一下。 該篇教程參考了靜覓的博文:http://cuiqingcai.com/954.html。寫這...
摘要:相當于該用戶的檔案。上述的文字對機制描述的比較簡單也并不一定完全正確。但是默認的并不支持。中供我們使用的是。創(chuàng)建需要闖入一個存放的容器。即過期的也保存。目前博主只知道鏈接后帶的參數(shù)需要與相匹配。但是并不知道兩者具體的關(guān)系。 很多網(wǎng)站的資源需要用戶登錄之后才能獲取。我們一旦登錄后再訪問其他被保護的資源的時候,就不再需要再次輸入賬號、密碼。那么網(wǎng)站是怎么辦到的呢?一般來說,用戶在登錄之后,...
摘要:是什么呀是一個和不太一樣的數(shù)據(jù)庫。懷疑是同時聯(lián)了四個集合的數(shù)據(jù)造成的。這本書的定位是和的應(yīng)用,所以有意弱化了數(shù)據(jù)庫的搭建維護和底層優(yōu)化。所以本書可能不適合數(shù)據(jù)庫工程師。 這篇文章沒有代碼,請放心閱讀。 程序員最寶貴的東西是生命,生命屬于程序員只有一次。一個程序員的一生應(yīng)該這樣度過:當她回首往事的時候,她不會因為搭建環(huán)境浪費時間而悔恨,也不會因為集群無法運行而羞恥。這樣,在她開發(fā)的時候,...
閱讀 990·2019-08-30 15:55
閱讀 577·2019-08-26 13:56
閱讀 2117·2019-08-26 12:23
閱讀 3337·2019-08-26 10:29
閱讀 631·2019-08-26 10:17
閱讀 2900·2019-08-23 16:53
閱讀 728·2019-08-23 15:55
閱讀 2861·2019-08-23 14:25