異步: 在調(diào)用發(fā)出后,可以直接返回,不管喲偶沒有結(jié)果。
非阻塞:是指程序在等待調(diào)用結(jié)果時(shí)的狀態(tài),指在不能立刻得到結(jié)果之前,該調(diào)用不會(huì)阻塞當(dāng)前線程
流程:1.首先Spiders(爬蟲)將需要發(fā)送請求的url(requests)經(jīng)ScrapyEngine(引擎)交給Scheduler(調(diào)度器)。
2.Scheduler(排序,入隊(duì))處理后,經(jīng)ScrapyEngine,DownloaderMiddlewares(可選,主要有User_Agent, Proxy代理)交給Downloader。
3.Downloader向互聯(lián)網(wǎng)發(fā)送請求,并接收下載響應(yīng)(response)。將響應(yīng)(response)經(jīng)ScrapyEngine,SpiderMiddlewares(可選)交給Spiders。
4.Spiders處理response,提取數(shù)據(jù)并將數(shù)據(jù)經(jīng)ScrapyEngine交給ItemPipeline保存(可以是本地,可以是數(shù)據(jù)庫)。
5.提取url重新經(jīng)ScrapyEngine交給Scheduler進(jìn)行下一個(gè)循環(huán)。直到?jīng)]有Url請求程序停止結(jié)束。
文件作用:
Scrapy Engine(引擎): 負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號(hào)、數(shù)據(jù)傳遞等。
Scheduler(調(diào)度器): 它負(fù)責(zé)接受引擎發(fā)送過來的Request請求,并按照一定的方式進(jìn)行整理排列,入隊(duì),當(dāng)引擎需要時(shí),交還給引擎。
Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
Spider(爬蟲):它負(fù)責(zé)處理所有Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler(調(diào)度器),
Item Pipeline(管道):它負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行進(jìn)行后期處理(詳細(xì)分析、過濾、存儲(chǔ)等)的地方.
Downloader Middlewares(下載中間件):可以自定義擴(kuò)展下載功能的組件(代理、cokies等)。
Spider Middlewares(Spider中間件):可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件
scrapy框架的使用:
? ? 1:先創(chuàng)建目錄:scrapy? startproject 爬蟲名稱
? ? ?2:創(chuàng)建爬蟲文件: scrapy?genspider 爬蟲名字 域名
? ? 3 運(yùn)行? scrapy crawl 爬蟲文件名稱
? ? ?response.url得到請求的url
? ? response.text得到響應(yīng)的字符串內(nèi)容
????response.status得到響應(yīng)狀態(tài)碼
????response.headers得到響應(yīng)頭部
在scrapy框架里可以直接使用xpath 和 css?
response.xpath():里面寫xpath路徑 得到的都是selector對象 需要通過extract()提取
response.css(): 里面寫選擇器, 選擇器::text獲取屬性 , ::attr(屬性) 得到的也都是selector對象,也需要extract去提取