溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中scrapy的介紹和使用

發(fā)布時(shí)間:2020-06-22 09:45:13 來(lái)源:億速云 閱讀:262 作者:Leah 欄目:編程語(yǔ)言

這篇文章給大家分享的是Python中scrapy的介紹和使用的詳細(xì)教程,相信大部分人都還不知道怎么部署,為了讓大家學(xué)會(huì),故而給大家總結(jié)了以下內(nèi)容。

scrapy的流程

Python中scrapy的介紹和使用

其流程可以描述如下:

● 調(diào)度器把requests-->引擎-->下載中間件--->下載器

● 下載器發(fā)送請(qǐng)求,獲取響應(yīng)---->下載中間件---->引擎--->爬蟲(chóng)中間件--->爬蟲(chóng)

● 爬蟲(chóng)提取url地址,組裝成request對(duì)象---->爬蟲(chóng)中間件--->引擎--->調(diào)度器

● 爬蟲(chóng)提取數(shù)據(jù)--->引擎--->管道

● 管道進(jìn)行數(shù)據(jù)的處理和保存

注意:

圖中綠色線條的表示數(shù)據(jù)的傳遞

注意圖中中間件的位置,決定了其作用

注意其中引擎的位置,所有的模塊之前相互獨(dú)立,只和引擎進(jìn)行交互

scrapy中每個(gè)模塊的具體作用

Python中scrapy的介紹和使用

1.scrapy項(xiàng)目實(shí)現(xiàn)流程

創(chuàng)建一個(gè)scrapy項(xiàng)目:scrapy startproject 項(xiàng)目名

生成一個(gè)爬蟲(chóng):scrapy genspider 爬蟲(chóng)名 允許爬取的范圍

提取數(shù)據(jù):完善spider,使用xpath等方法

保存數(shù)據(jù):pipeline中保存數(shù)據(jù)

2. 創(chuàng)建scrapy項(xiàng)目

命令:scrapy startproject +<項(xiàng)目名字>

示例:scrapy startproject myspider

生成的目錄和文件結(jié)果如下:

Python中scrapy的介紹和使用

settings.py中的重點(diǎn)字段和內(nèi)涵

● USER_AGENT 設(shè)置ua

● ROBOTSTXT_OBEY 是否遵守robots協(xié)議,默認(rèn)是遵守

● CONCURRENT_REQUESTS 設(shè)置并發(fā)請(qǐng)求的數(shù)量,默認(rèn)是16個(gè)

● DOWNLOAD_DELAY 下載延遲,默認(rèn)無(wú)延遲

● COOKIES_ENABLED 是否開(kāi)啟cookie,即每次請(qǐng)求帶上前一次的cookie,默認(rèn)是開(kāi)啟的

● DEFAULT_REQUEST_HEADERS 設(shè)置默認(rèn)請(qǐng)求頭

● SPIDER_MIDDLEWARES 爬蟲(chóng)中間件,設(shè)置過(guò)程和管道相同

● DOWNLOADER_MIDDLEWARES 下載中間件

創(chuàng)建爬蟲(chóng)

命令:scrapy genspider +<爬蟲(chóng)名字> + <允許爬取的域名>

生成的目錄和文件結(jié)果如下:

Python中scrapy的介紹和使用

完善spider

完善spider即通過(guò)方法進(jìn)行數(shù)據(jù)的提取等操做:

Python中scrapy的介紹和使用

注意:

● response.xpath方法的返回結(jié)果是一個(gè)類似list的類型,其中包含的是selector對(duì)象,操作和列表一樣,但是有一些額外的方法

● extract() 返回一個(gè)包含有字符串的列表

● extract_first() 返回列表中的第一個(gè)字符串,列表為空沒(méi)有返回None

● spider中的parse方法必須有

● 需要抓取的url地址必須屬于allowed_domains,但是start_urls中的url地址沒(méi)有這個(gè)限制

● 啟動(dòng)爬蟲(chóng)的時(shí)候注意啟動(dòng)的位置,是在項(xiàng)目路徑下啟動(dòng)

數(shù)據(jù)傳遞到pipeline

Python中scrapy的介紹和使用

為什么要使用yield?

● 讓整個(gè)函數(shù)變成一個(gè)生成器,有什么好處呢?

● 遍歷這個(gè)函數(shù)的返回值的時(shí)候,挨個(gè)把數(shù)據(jù)讀到內(nèi)存,不會(huì)造成內(nèi)存的瞬間占用過(guò)高

● python3中的range和python2中的xrange同理

注意:

yield能夠傳遞的對(duì)象只能是:BaseItem,Request,dict,None

6. 完善pipeline

Python中scrapy的介紹和使用

Python中scrapy的介紹和使用

pipeline在settings中能夠開(kāi)啟多個(gè),為什么需要開(kāi)啟多個(gè)?

● 不同的pipeline可以處理不同爬蟲(chóng)的數(shù)據(jù)

● 不同的pipeline能夠進(jìn)行不同的數(shù)據(jù)處理的操作,比如一個(gè)進(jìn)行數(shù)據(jù)清洗,一個(gè)進(jìn)行數(shù)據(jù)的保存

pipeline使用注意點(diǎn)

● 使用之前需要在settings中開(kāi)啟

● pipeline在setting中鍵表示位置(即pipeline在項(xiàng)目中的位置可以自定義),值表示距離引擎的遠(yuǎn)近,越近數(shù)據(jù)會(huì)越先經(jīng)過(guò)

● 有多個(gè)pipeline的時(shí)候,process_item的方法必須return item,否則后一個(gè)pipeline取到的數(shù)據(jù)為None值

● pipeline中process_item的方法必須有,否則item沒(méi)有辦法接受和處理

● process_item方法接受item和spider,其中spider表示當(dāng)前傳遞item過(guò)來(lái)的spider

看完上述內(nèi)容,你們對(duì)Python中scrapy有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI