異步:調(diào)用在發(fā)出之后锅风,這個(gè)調(diào)用就直接返回牢撼,不管有無(wú)結(jié)果
非阻塞:關(guān)注的是程序在等待調(diào)用結(jié)果(消息夏醉,返回值)時(shí)的狀態(tài)爽锥,指在不能立刻得到結(jié)果之前,該調(diào)用不會(huì)阻塞當(dāng)前線程
.................................................................................................................................................................
scrapy框架圖
Scrapy Engine(引擎): 負(fù)責(zé)Spider畔柔、ItemPipeline氯夷、Downloader、Scheduler中間的通訊靶擦,信號(hào)腮考、數(shù)據(jù)傳遞等雇毫。
Scheduler(調(diào)度器): 它負(fù)責(zé)接受引擎發(fā)送過(guò)來(lái)的Request請(qǐng)求,并按照一定的方式進(jìn)行整理排列踩蔚,入隊(duì)棚放,當(dāng)引擎需要時(shí),交還給引擎馅闽。
Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請(qǐng)求飘蚯,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來(lái)處理福也,
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ì)分析现喳、過(guò)濾凯傲、存儲(chǔ)等)的地方.
Downloader Middlewares(下載中間件):可以自定義擴(kuò)展下載功能的組件(代理、cokies等)嗦篱。
Spider Middlewares(Spider中間件):可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses;和從Spider出去的Requests)
.....................................................................................................................................................................................
新建項(xiàng)目:(scrapy startproject)
創(chuàng)建爬蟲項(xiàng)目:scrapy startproject jobboleproject
新建爬蟲文件:scrapy genspider jobbole jobbole.com
.................................................................................................................................................................
yield 的作用:就是把一個(gè)函數(shù)變成一個(gè) generator(生成器)冰单,帶有 yield 的函數(shù)不再是一個(gè)普通函數(shù),Python 解釋器會(huì)將其視為一個(gè) generator
(通俗的講就是:在一個(gè)函數(shù)中默色,程序執(zhí)行到y(tǒng)ield語(yǔ)句的時(shí)候球凰,程序暫停狮腿,返回yield后面表達(dá)式的值腿宰,在下一次調(diào)用的時(shí)候,從yield語(yǔ)句暫停的地方繼續(xù)執(zhí)行缘厢,如此循環(huán)吃度,直到函數(shù)執(zhí)行完。)
.....................................................................................................................................................................................
init(): 初始化爬蟲名字和start_urls列表
start_requests()調(diào)用make_requests_from url():生成Requests對(duì)象交給Scrapy下載并返回response
parse():
解析response贴硫,并返回Item或Requests(需指定回調(diào)函數(shù))椿每。
Item傳給Item pipline持久化 , 而Requests交由Scrapy下載英遭,并由指定的回調(diào)函數(shù)處理(默認(rèn)parse())间护,一直進(jìn)行循環(huán),直到處理完所有的數(shù)據(jù)為止挖诸。
....................................................................................................................................................................................
url: 就是需要請(qǐng)求汁尺,并進(jìn)行下一步處理的url
callback: 指定該請(qǐng)求返回的Response,由那個(gè)函數(shù)來(lái)處理多律。
method: 請(qǐng)求一般不需要指定痴突,默認(rèn)GET方法搂蜓,可設(shè)置為"GET", "POST", "PUT"等,且保證字符串大寫
headers: 請(qǐng)求頭
cookies: cookies,模擬用戶登錄需要指定用戶的cookies,字典dict型
meta: 比較常用辽装,在不同的請(qǐng)求之間傳遞數(shù)據(jù)使用的帮碰。字典dict型
encoding: 編碼類型,使用默認(rèn)的 'utf-8' 就行。
dont_filter: 表明該請(qǐng)求不由調(diào)度器過(guò)濾拾积。這是當(dāng)你想使用多次執(zhí)行相同的請(qǐng)求,忽略重復(fù)的過(guò)濾器殉挽。默認(rèn)為False。
errback: 指定錯(cuò)誤處理函數(shù)