Spider類(lèi)定義了如何爬去某個(gè)網(wǎng)站,包括爬取的動(dòng)作以及如何從網(wǎng)頁(yè)內(nèi)容中提取結(jié)構(gòu)化的數(shù)據(jù),總的來(lái)說(shuō)spider就是定義爬取的動(dòng)作以及分析某個(gè)網(wǎng)頁(yè)

工作流程分析

  1. 以初始的URL初始化Request,并設(shè)置回調(diào)函數(shù),當(dāng)該request下載完畢并返回時(shí),將生成response,并作為參數(shù)傳給回調(diào)函數(shù). spider中初始的requesst是通過(guò)start_requests()來(lái)獲取的。start_requests()獲取 start_urls中的URL,并以parse以回調(diào)函數(shù)生成Request 

  2. 在回調(diào)函數(shù)內(nèi)分析返回的網(wǎng)頁(yè)內(nèi)容,可以返回Item對(duì)象,或者Dict,或者Request,以及是一個(gè)包含三者的可迭代的容器,返回的Request對(duì)象之后會(huì)經(jīng)過(guò)Scrapy處理,下載相應(yīng)的內(nèi)容,并調(diào)用設(shè)置的callback函數(shù)

  3. 在回調(diào)函數(shù)內(nèi),可以通過(guò)lxml,bs4,xpath,css等方法獲取我們想要的內(nèi)容生成item

  4. 最后將item傳遞給Pipeline處理

我們以通過(guò)簡(jiǎn)單的分析源碼來(lái)理解
我通常在寫(xiě)spiders下寫(xiě)爬蟲(chóng)的時(shí)候,我們并沒(méi)有寫(xiě)start_requests來(lái)處理start_urls中的url,這是因?yàn)槲覀冊(cè)诶^承的scrapy.Spider中已經(jīng)寫(xiě)過(guò)了,我們可以點(diǎn)開(kāi)scrapy.Spider查看分析

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

通過(guò)上述代碼我們可以看到在父類(lèi)里這里實(shí)現(xiàn)了start_requests方法,通過(guò)make_requests_from_url做了Request請(qǐng)求
如下圖所示的一個(gè)例子,parse回調(diào)函數(shù)中的response就是父類(lèi)列start_requests方法調(diào)用make_requests_from_url返回的結(jié)果,并且在parse回調(diào)函數(shù)中我們可以繼續(xù)返回Request,如下屬代碼中yield Request()并設(shè)置回調(diào)函數(shù)。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

spider內(nèi)的一些常用屬性

我們所有自己寫(xiě)的爬蟲(chóng)都是繼承與spider.Spider這個(gè)類(lèi)

name

定義爬蟲(chóng)名字,我們通過(guò)命令啟動(dòng)的時(shí)候用的就是這個(gè)名字,這個(gè)名字必須是唯一的

allowed_domains

包含了spider允許爬取的域名列表。當(dāng)offsiteMiddleware啟用時(shí),域名不在列表中URL不會(huì)被訪(fǎng)問(wèn)
所以在爬蟲(chóng)文件中,每次生成Request請(qǐng)求時(shí)都會(huì)進(jìn)行和這里的域名進(jìn)行判斷

start_urls

起始的url列表
這里會(huì)通過(guò)spider.Spider方法中會(huì)調(diào)用start_request循環(huán)請(qǐng)求這個(gè)列表中每個(gè)地址。

custom_settings

自定義配置,可以覆蓋settings的配置,主要用于當(dāng)我們對(duì)爬蟲(chóng)有特定需求設(shè)置的時(shí)候

設(shè)置的是以字典的方式設(shè)置:custom_settings = {}

from_crawler

這是一個(gè)類(lèi)方法,我們定義這樣一個(gè)類(lèi)方法,可以通過(guò)crawler.settings.get()這種方式獲取settings配置文件中的信息,同時(shí)這個(gè)也可以在pipeline中使用

start_requests()
這個(gè)方法必須返回一個(gè)可迭代對(duì)象,該對(duì)象包含了spider用于爬取的第一個(gè)Request請(qǐng)求
這個(gè)方法是在被繼承的父類(lèi)中spider.Spider中寫(xiě)的,默認(rèn)是通過(guò)get請(qǐng)求,如果我們需要修改最開(kāi)始的這個(gè)請(qǐng)求,可以重寫(xiě)這個(gè)方法,如我們想通過(guò)post請(qǐng)求

make_requests_from_url(url)
這個(gè)也是在父類(lèi)中start_requests調(diào)用的,當(dāng)然這個(gè)方法我們也可以重寫(xiě)

parse(response)
這個(gè)其實(shí)默認(rèn)的回調(diào)函數(shù)
負(fù)責(zé)處理response并返回處理的數(shù)據(jù)以及跟進(jìn)的url
該方法以及其他的Request回調(diào)函數(shù)必須返回一個(gè)包含Request或Item的可迭代對(duì)象

 

所有的努力都值得期許,每一份夢(mèng)想都應(yīng)該灌溉!

Spider類(lèi)定義了如何爬去某個(gè)網(wǎng)站,包括爬取的動(dòng)作以及如何從網(wǎng)頁(yè)內(nèi)容中提取結(jié)構(gòu)化的數(shù)據(jù),總的來(lái)說(shuō)spider就是定義爬取的動(dòng)作以及分析某個(gè)網(wǎng)頁(yè)

工作流程分析

  1. 以初始的URL初始化Request,并設(shè)置回調(diào)函數(shù),當(dāng)該request下載完畢并返回時(shí),將生成response,并作為參數(shù)傳給回調(diào)函數(shù). spider中初始的requesst是通過(guò)start_requests()來(lái)獲取的。start_requests()獲取 start_urls中的URL,并以parse以回調(diào)函數(shù)生成Request 

  2. 在回調(diào)函數(shù)內(nèi)分析返回的網(wǎng)頁(yè)內(nèi)容,可以返回Item對(duì)象,或者Dict,或者Request,以及是一個(gè)包含三者的可迭代的容器,返回的Request對(duì)象之后會(huì)經(jīng)過(guò)Scrapy處理,下載相應(yīng)的內(nèi)容,并調(diào)用設(shè)置的callback函數(shù)

  3. 在回調(diào)函數(shù)內(nèi),可以通過(guò)lxml,bs4,xpath,css等方法獲取我們想要的內(nèi)容生成item

  4. 最后將item傳遞給Pipeline處理

我們以通過(guò)簡(jiǎn)單的分析源碼來(lái)理解
我通常在寫(xiě)spiders下寫(xiě)爬蟲(chóng)的時(shí)候,我們并沒(méi)有寫(xiě)start_requests來(lái)處理start_urls中的url,這是因?yàn)槲覀冊(cè)诶^承的scrapy.Spider中已經(jīng)寫(xiě)過(guò)了,我們可以點(diǎn)開(kāi)scrapy.Spider查看分析

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

通過(guò)上述代碼我們可以看到在父類(lèi)里這里實(shí)現(xiàn)了start_requests方法,通過(guò)make_requests_from_url做了Request請(qǐng)求
如下圖所示的一個(gè)例子,parse回調(diào)函數(shù)中的response就是父類(lèi)列start_requests方法調(diào)用make_requests_from_url返回的結(jié)果,并且在parse回調(diào)函數(shù)中我們可以繼續(xù)返回Request,如下屬代碼中yield Request()并設(shè)置回調(diào)函數(shù)。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

spider內(nèi)的一些常用屬性

我們所有自己寫(xiě)的爬蟲(chóng)都是繼承與spider.Spider這個(gè)類(lèi)

name

定義爬蟲(chóng)名字,我們通過(guò)命令啟動(dòng)的時(shí)候用的就是這個(gè)名字,這個(gè)名字必須是唯一的

allowed_domains

包含了spider允許爬取的域名列表。當(dāng)offsiteMiddleware啟用時(shí),域名不在列表中URL不會(huì)被訪(fǎng)問(wèn)
所以在爬蟲(chóng)文件中,每次生成Request請(qǐng)求時(shí)都會(huì)進(jìn)行和這里的域名進(jìn)行判斷

start_urls

起始的url列表
這里會(huì)通過(guò)spider.Spider方法中會(huì)調(diào)用start_request循環(huán)請(qǐng)求這個(gè)列表中每個(gè)地址。

custom_settings

自定義配置,可以覆蓋settings的配置,主要用于當(dāng)我們對(duì)爬蟲(chóng)有特定需求設(shè)置的時(shí)候

設(shè)置的是以字典的方式設(shè)置:custom_settings = {}

from_crawler

這是一個(gè)類(lèi)方法,我們定義這樣一個(gè)類(lèi)方法,可以通過(guò)crawler.settings.get()這種方式獲取settings配置文件中的信息,同時(shí)這個(gè)也可以在pipeline中使用

start_requests()
這個(gè)方法必須返回一個(gè)可迭代對(duì)象,該對(duì)象包含了spider用于爬取的第一個(gè)Request請(qǐng)求
這個(gè)方法是在被繼承的父類(lèi)中spider.Spider中寫(xiě)的,默認(rèn)是通過(guò)get請(qǐng)求,如果我們需要修改最開(kāi)始的這個(gè)請(qǐng)求,可以重寫(xiě)這個(gè)方法,如我們想通過(guò)post請(qǐng)求

make_requests_from_url(url)
這個(gè)也是在父類(lèi)中start_requests調(diào)用的,當(dāng)然這個(gè)方法我們也可以重寫(xiě)

parse(response)
這個(gè)其實(shí)默認(rèn)的回調(diào)函數(shù)
負(fù)責(zé)處理response并返回處理的數(shù)據(jù)以及跟進(jìn)的url
該方法以及其他的Request回調(diào)函數(shù)必須返回一個(gè)包含Request或Item的可迭代對(duì)象

 

所有的努力都值得期許,每一份夢(mèng)想都應(yīng)該灌溉!

http://www.cnblogs.com/zhaof/p/7192503.html