項(xiàng)目名稱(chēng)為ITcast
?? 當(dāng)執(zhí)行爬蟲(chóng)的yield item時(shí) 就會(huì)調(diào)用圖二中的管道文件(不過(guò)需要在setting.py中配置,ITEM_PIPELINES這一行中配置,在這個(gè)字典中所包含的管道才可以被調(diào)用,同理可以在里面加上自定義管道,比如數(shù)據(jù)庫(kù)管道什么的,并且后面的數(shù)字是優(yōu)先級(jí),0-1000之間,值越小優(yōu)先級(jí)越高)每個(gè)item都會(huì)執(zhí)行這些管道
圖二中:
第一個(gè)函數(shù):初始化
第二個(gè)函數(shù):因?yàn)榉祷氐膬?nèi)容存在中文,所以將item返回的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,然后寫(xiě)入文件,再返回item告訴引擎已經(jīng)處理完畢
第三個(gè)函數(shù):在關(guān)閉的時(shí)候關(guān)閉文件
一般在新建目錄里去執(zhí)行
這是爬蟲(chóng)主要內(nèi)容,解釋都已經(jīng)已備注形式寫(xiě)上去了,還有一點(diǎn)是下面輸出的name[0]是因?yàn)閤path對(duì)象是一個(gè)列表,用[0]才可以,還有就是xpath("./h3/test()")之前的那個(gè)點(diǎn)是指從當(dāng)前節(jié)點(diǎn),不加的話(huà)會(huì)變成根節(jié)點(diǎn)
但這是并沒(méi)有用到item字段,那么怎么去交互呢
item部分
然后可以scrapy crawl itcast -o itcast.json 輸出成為json文件,不過(guò)都是unicode字符串,到時(shí)候扔到網(wǎng)站解碼即可
當(dāng)然不僅僅是.json格式,還可以輸出.csv? .jsonl?? .xml等四種文件格式
這里的item因?yàn)槭橇斜恚祷亟o引擎時(shí)引擎無(wú)法識(shí)別,所以只能用-o來(lái)處理
有時(shí)輸出文件并不是我們所需要的,如果我們想存入數(shù)據(jù)庫(kù)應(yīng)該怎么辦,那么就需要管道了
在start_urls里面可以加更多的網(wǎng)址,這些網(wǎng)址用多線(xiàn)程執(zhí)行,
爬蟲(chóng)啟動(dòng)的時(shí)候,找到start_urls里面的內(nèi)容,提取url,封裝成請(qǐng)求,交給引擎,引擎交給調(diào)度器入隊(duì)列,去重處理之后再交給下載器下載,下載器返回的響應(yīng)文件交給parse方法處理,在parse方法里根據(jù)xpath返回的節(jié)點(diǎn),迭代每個(gè)節(jié)點(diǎn),我們將每個(gè)xpath對(duì)象extract后,放到我們定義好的item字段里,再把item字段放到列表里