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

下載本文檔

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

文檔簡介

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

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

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

4、據(jù),封裝成item后提交給engine。engine將item送往itempipelines舉行處理,終于以某種數(shù)據(jù)格式寫入文件(csv,json)或者存儲到數(shù)據(jù)庫中。囫圇流程的核心都是圍圍著engine舉行的。request對象request對象用來描述一個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對象哀求的頁面下載完成后,由該參數(shù)指定的頁面解析函數(shù)被調(diào)用。假如未傳遞該參數(shù),默認調(diào)用spider的parse辦法。method:http哀求的辦法,默認為&39;get&39;。headers:http哀求的頭部字典,dict類型,例如&39;accept&39;:&39;text/html&39;,&39;user-agent&39;:mozilla/5.0&39;。假如其中某項的值為none,就表示不發(fā)

6、送該項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對象的meta屬性拜訪該元數(shù)據(jù)字典(request.meta),也用于給響應(yīng)處理函數(shù)傳遞信息,詳見response的meta屬性。encodin

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

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

9、是textresponse的子類。事實上,這3個子類惟獨細微的差別,這里以htmlresponse為例舉行講解。下面是htmlresponse對象的屬性及辦法。url:http響應(yīng)的url地址,str類型。status:http響應(yīng)的狀態(tài)碼,int類型,例如200,404。headers:http響應(yīng)的頭頭部,類字典類型,可以調(diào)用get或getlist辦法對其舉行拜訪,例如: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對象。meta:即response.request.meta,在構(gòu)造request對象時,可將要傳遞給響應(yīng)處理函數(shù)的信息通過meta參數(shù)傳入;響應(yīng)處理函數(shù)處理響應(yīng)時,通過response.meta將信息取出。selector:

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

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

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

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

溫馨提示

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

評論

0/150

提交評論