scrapy是一個(gè)基于Twisted的異步處理框架,可擴(kuò)展性很強(qiáng)。優(yōu)點(diǎn)此處不再一一贅述。
下面介紹一些概念性知識(shí),幫助大家理解scrapy。
一、數(shù)據(jù)流向
要想熟練掌握這個(gè)框架,一定要明白數(shù)據(jù)的流向是怎么一個(gè)過程。總結(jié)如下:
1.引擎先打開網(wǎng)站,請(qǐng)求url。
2.引擎通過調(diào)度器以Request形式調(diào)度url。
3.引擎請(qǐng)求下一個(gè)url。
4.調(diào)度器將url通過Downloader Middlewares發(fā)送給引擎
5.Downloader 生成response,通過Downloader Middlewares發(fā)送給引擎
6.引擎接收Response 通過spiderMiddleware發(fā)送給spider處理
7.spider處理response
8.引擎將spider處理的item給ItemPipeline 然后將新的Request給調(diào)度器。
二、各個(gè)結(jié)構(gòu)的作用
DownloderMiddleware
調(diào)度器會(huì)從隊(duì)列之中拿出Request發(fā)送給Downloader執(zhí)行下載,這個(gè)過程會(huì)經(jīng)過DownloaderMiddleware的處理。
作用的位置有兩個(gè):
在調(diào)度器調(diào)出Request發(fā)送給Downloader之前。 下載之后生成Response發(fā)送給spider之前。核心方法有三個(gè):
process_request(request,spider)
Request 到達(dá)Downloader之前,就會(huì)被調(diào)用
參數(shù)介紹:
request :Request對(duì)象,被處理的Request。 spider:spider對(duì)象,上面被處理的Request對(duì)應(yīng)的spider。返回值:
1.返回None
調(diào)用別的process_request()
方法,直至將Request執(zhí)行得到Response才會(huì)結(jié)束。
2.返回Response
對(duì)象,低優(yōu)先級(jí)的process_request()
和process_exception
不調(diào)用。
3.返回request
對(duì)象,低優(yōu)先級(jí)的process_request()
停止執(zhí)行,返回新的Request
。
process_response(request,response,spider)
作用位置:
Downloader 執(zhí)行Request之后,會(huì)得到對(duì)應(yīng)的Reponse ,scrapy 引擎會(huì)將Response發(fā)送給spider進(jìn)行解析,發(fā)送之前調(diào)用這個(gè)方法對(duì)Response進(jìn)行處理。返回值的情況:
1.返回Request
低優(yōu)先級(jí)的process_respons()
不調(diào)用。
2.返回response
低優(yōu)先級(jí)的process_respons()
繼續(xù)調(diào)用。
process_exception(request,exception,spider)
此函數(shù)主要是用來(lái)處理異常的。
spiderMiddleware
作用位置:
Downloader生成Response之后會(huì)發(fā)送給spider, 在發(fā)送之前,會(huì)經(jīng)過spiderMiddleware處理。核心方法:
process_soider_input(response,spider)
返回值:
1.返回None
繼續(xù)處理Response,調(diào)用所有的spiderMiddleware
,知道spider處理
2.跑出異常
直接調(diào)用Request的errback()
方法,使用process_spider_output()
處理。
process_spider_output(response,result,spider)
新聞熱點(diǎn)
疑難解答
圖片精選