scrapy學(xué)習(xí)筆記(二)框架結(jié)構(gòu)工作原理_第1頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、scrapy學(xué)習(xí)筆記(二)框架結(jié)構(gòu)工作原理scrapy結(jié)構(gòu)圖:scrapy組件:engine:引擎,框架的核心,其它全部組件在其控制下協(xié)同工作。scheduler:調(diào)度器,負(fù)責(zé)對(duì)spider提交的下載哀求舉行調(diào)度。downloader:下載器,負(fù)責(zé)下載頁面(發(fā)送http哀求/接收http響應(yīng))。spider:爬蟲,負(fù)責(zé)提取頁面中的數(shù)據(jù),并產(chǎn)生對(duì)新頁面的下載哀求。middleware:中間件,負(fù)責(zé)對(duì)request對(duì)象和response對(duì)象舉行處理。itempipeline:數(shù)據(jù)管道,負(fù)責(zé)對(duì)爬取到的數(shù)據(jù)舉行處理。對(duì)于用戶來說,spider是最核心的組件,scrapy爬蟲開發(fā)是圍繞實(shí)現(xiàn)spider綻

2、開的。框架中的數(shù)據(jù)流:request:scrapy中的http哀求對(duì)象。response:scrapy中的http響應(yīng)對(duì)象。item:從頁面中爬取的一項(xiàng)數(shù)據(jù)。request和response是http協(xié)議中的術(shù)語,即http哀求和http響應(yīng),scrapy框架中定義了相應(yīng)的request和response類,這里的item代表spider從頁面中爬取的一項(xiàng)數(shù)據(jù)。scrapy大致工作流程:當(dāng)spider要爬取某url地址的頁面時(shí),需用法該url構(gòu)造一個(gè)request對(duì)象,提交給engine。engine將request對(duì)象傳給scheduler,scheduler對(duì)url舉行去重,按某種算法舉行

3、排隊(duì),之后的某個(gè)時(shí)刻scheduler將其出隊(duì),將處理好的request對(duì)象返回給engine。engine將scheduler處理后的request對(duì)象發(fā)送給downloader下載頁面。downloader按照middleware的規(guī)章,用法request對(duì)象中的url地址發(fā)送一次http哀求到網(wǎng)站服務(wù)器,之后用服務(wù)器返回的http響應(yīng)構(gòu)造出一個(gè)response對(duì)象,其中包含頁面的html文本。downloader將結(jié)果resopnse對(duì)象傳給engine。engine將response對(duì)象發(fā)送給spider的頁面解析函數(shù)(構(gòu)造request對(duì)象時(shí)指定)舉行處理,頁面解析函數(shù)從頁面中提取數(shù)

4、據(jù),封裝成item后提交給engine。engine將item送往itempipelines舉行處理,終于以某種數(shù)據(jù)格式寫入文件(csv,json)或者存儲(chǔ)到數(shù)據(jù)庫中。囫圇流程的核心都是圍圍著engine舉行的。request對(duì)象request對(duì)象用來描述一個(gè)http哀求,下面是其構(gòu)造器辦法的參數(shù)列表。request(url,callback=none,method=&39;get&39;,headers=none,body=none,cookies=none,meta=none,encoding=&39;utf-8&39;,priority=0,dont_filter=false,errba

5、ck=none,flags=none)url(必選):哀求頁面的url地址,bytes或str類型,如&39;&39;。callback:頁面解析函數(shù),callable類型,request對(duì)象哀求的頁面下載完成后,由該參數(shù)指定的頁面解析函數(shù)被調(diào)用。假如未傳遞該參數(shù),默認(rèn)調(diào)用spider的parse辦法。method:http哀求的辦法,默認(rèn)為&39;get&39;。headers:http哀求的頭部字典,dict類型,例如&39;accept&39;:&39;text/html&39;,&39;user-agent&39;:mozilla/5.0&39;。假如其中某項(xiàng)的值為none,就表示不發(fā)

6、送該項(xiàng)http頭部,例如&39;cookie&39;:none,禁止發(fā)送cookie。body:http哀求的正文,bytes或str類型。cookies:cookie信息字典,dict類型,例如&39;currency&39;:&39;usd&39;,&39;country&39;:&39;uy&39;。meta:request的元數(shù)據(jù)字典,dict類型,用于給框架中其他組件傳遞信息,比如中間件itempipeline。其他組件可以用法request對(duì)象的meta屬性拜訪該元數(shù)據(jù)字典(request.meta),也用于給響應(yīng)處理函數(shù)傳遞信息,詳見response的meta屬性。encodin

7、g:url和body參數(shù)的編碼默認(rèn)為&39;utf-8&39;。假如傳入的url或body參數(shù)是str類型,就用法該參數(shù)舉行編碼。priority:哀求的優(yōu)先級(jí)默認(rèn)值為0,優(yōu)先級(jí)高的哀求優(yōu)先下載。dont_filter:默認(rèn)狀況下(dont_filter=false),對(duì)同一個(gè)url地址多次提交下載哀求,后面的哀求會(huì)被去重過濾器過濾(避開重復(fù)下載)。假如將該參數(shù)置為true,可以使哀求避開被過濾,強(qiáng)制下載。例如,在多次爬取一個(gè)內(nèi)容隨時(shí)光而變幻的頁面時(shí)(每次用法相同的url),可以將該參數(shù)置為true。errback:哀求浮現(xiàn)異樣或者浮現(xiàn)http錯(cuò)誤時(shí)(如404頁面不存在)的回調(diào)函數(shù)。雖然參數(shù)無

8、數(shù),但除了url參數(shù)外,其他都帶有默認(rèn)值。在構(gòu)造request對(duì)象時(shí),通常我們只需傳遞一個(gè)url參數(shù)或再加一個(gè)callback參數(shù),其他用法默認(rèn)值即可。response對(duì)象:response對(duì)象用來描述一個(gè)http響應(yīng),response只是一個(gè)基類,按照響應(yīng)內(nèi)容的不同有如下子類:textresponsehtmlresponsexmlresponse當(dāng)一個(gè)頁面下載完成時(shí),下載器依據(jù)http響應(yīng)頭部中的content-type信息創(chuàng)建某個(gè)response的子類對(duì)象。我們通常爬取的網(wǎng)頁,其內(nèi)容是html文本,創(chuàng)建的便是htmlresponse對(duì)象,其中htmlresponse和xmlresponse

9、是textresponse的子類。事實(shí)上,這3個(gè)子類惟獨(dú)細(xì)微的差別,這里以htmlresponse為例舉行講解。下面是htmlresponse對(duì)象的屬性及辦法。url:http響應(yīng)的url地址,str類型。status:http響應(yīng)的狀態(tài)碼,int類型,例如200,404。headers:http響應(yīng)的頭頭部,類字典類型,可以調(diào)用get或getlist辦法對(duì)其舉行拜訪,例如:response.headers.get(&39;content-type&39;)response.headers.getlist(&39;set-cookie&39;)body:http響應(yīng)正文,bytes類型。tex

10、t:文本形式的http響應(yīng)正文,str類型,它是由response.body用法response.encoding解碼得到的,即reponse.text=response.body.decode(response.encoding)encoding:http響應(yīng)正文的編碼,它的值可能是從http響應(yīng)頭部或正文中解析出來的。request:產(chǎn)生該http響應(yīng)的request對(duì)象。meta:即response.request.meta,在構(gòu)造request對(duì)象時(shí),可將要傳遞給響應(yīng)處理函數(shù)的信息通過meta參數(shù)傳入;響應(yīng)處理函數(shù)處理響應(yīng)時(shí),通過response.meta將信息取出。selector:

11、selector對(duì)象用于在response中提取數(shù)據(jù)。xpath(query):用法xpath挑選器在response中提取數(shù)據(jù),事實(shí)上它是response.selector.xpath辦法的快捷方式。css(query):用法css挑選器在response中提取數(shù)據(jù),事實(shí)上它是response.selector.css辦法的快捷方式。urljoin(url):用于構(gòu)造肯定url。當(dāng)傳入的url參數(shù)是一個(gè)相對(duì)地址時(shí),按照response.url計(jì)算出相應(yīng)的肯定url。例如:response.url為雖然htmlresponse對(duì)象有無數(shù)屬性,但最常用的是以下的3個(gè)辦法:xpath(query)

12、css(query)urljoin(url)前兩個(gè)辦法用于提取數(shù)據(jù),后一個(gè)辦法用于構(gòu)造肯定url。spied開發(fā)流程實(shí)現(xiàn)一個(gè)spider子類的過程很像是完成一系列填空題,scrapy框架提出以下問題讓用戶在spider子類中作答:爬蟲從哪個(gè)或哪些頁面開頭爬?。繉?duì)于一個(gè)已下載的頁面,提取其中的哪些數(shù)據(jù)?爬取完當(dāng)前頁面后,接下來爬取哪個(gè)或哪些頁面?實(shí)現(xiàn)一個(gè)spider只需要完成下面4個(gè)步驟:繼承scrapy.spider。為spider取名。設(shè)定起始爬取點(diǎn)。實(shí)現(xiàn)頁面解析函數(shù)。scrapy.spider基類實(shí)現(xiàn)了以下內(nèi)容:供scrapy引擎調(diào)用的接口,例如用來創(chuàng)建spider實(shí)例的類辦法from_c

13、rawler。供用戶用法的有用工具函數(shù),例如可以調(diào)用log辦法將調(diào)試信息輸出到日志。供用戶拜訪的屬性,例如可以通過settings屬性拜訪配置文件中的配置。關(guān)于起始urlstart_urls:start_urls通常被實(shí)現(xiàn)成一個(gè)列表,其中放入全部起始爬取點(diǎn)的url(例子中惟獨(dú)一個(gè)起始點(diǎn))??吹竭@里,大家可能會(huì)想,哀求頁面下載不是一定要提交request對(duì)象么?而我們僅定義了url列表,是誰暗中構(gòu)造并提交了相應(yīng)的request對(duì)象呢?我們將起始url提交給engine。engine調(diào)用start_requests辦法,我們沒有實(shí)現(xiàn)囫圇辦法,所以調(diào)用了基類的start_requests辦法。通過閱

14、讀spider基類的源碼可以看到如下內(nèi)容:基類的start_requests將我們的url封裝成request對(duì)象。由此我們知道request對(duì)象是調(diào)用基類start_requests辦法產(chǎn)生的,因此我們也可以自己定義start_requests辦法(籠罩基類spider的start_requests辦法),挺直構(gòu)造并提交起始爬取點(diǎn)的request對(duì)象。在某些場(chǎng)景下用法這種方式越發(fā)靈便,例如有時(shí)想為request添加特定的http哀求頭部,或想為request指定特定的頁面解析函數(shù)。頁面解析函數(shù)parse:頁面解析函數(shù)也就是構(gòu)造request對(duì)象時(shí)通過callback參數(shù)指定的回調(diào)函數(shù)(或默認(rèn)的parse辦法)。頁面解析函數(shù)是實(shí)現(xiàn)spider中最核心的部分,它需要完成以下兩項(xiàng)工作:用法挑選器提取頁面中的數(shù)據(jù),將數(shù)據(jù)封

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論