Scrapy框架簡(jiǎn)介

Scrapy 是一個(gè)用 Python 實(shí)現(xiàn)的為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)的應(yīng)用框架。
Scrapy 使用Twisted異步網(wǎng)絡(luò)庫來處理網(wǎng)絡(luò)通訊。
使用 Scrapy 框架可以高效(爬取效率和開發(fā)效率)完成網(wǎng)站數(shù)據(jù)爬取任務(wù)。


一、Scrapy架構(gòu)圖(箭頭指示的是數(shù)據(jù)流向)

架構(gòu)圖1
架構(gòu)圖2
  1. Scrapy Engine(引擎): 負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,傳遞信號(hào)、數(shù)據(jù)等。
  2. Scheduler(調(diào)度器): 負(fù)責(zé)接受引擎發(fā)送過來的Request請(qǐng)求,并按照一定的方式進(jìn)行整理排列,入隊(duì),當(dāng)引擎需要時(shí),交還給引擎。
  3. Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請(qǐng)求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
  4. Spider(爬蟲):它負(fù)責(zé)處理所有Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler。
  5. Item Pipeline(管道):它負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行進(jìn)行后期處理(詳細(xì)分析、過濾、存儲(chǔ)等)的地方。
  6. Downloader Middlewares(下載中間件):自定義擴(kuò)展引擎和下載中間的組件。
  7. Spider Middlewares(爬蟲中間件):自定義擴(kuò)展、操作引擎和爬蟲中間通信的功能組件。

二、Scrapy的運(yùn)作流程

代碼寫好,程序開始運(yùn)行...

  1. 引擎:Hi!Spider, 你要處理哪一個(gè)網(wǎng)站?
  2. Spider:老大要我處理xxxx.com。
  3. 引擎:你把第一個(gè)需要處理的URL給我吧。
  4. Spider:給你,第一個(gè)URL是xxxxxxx.com。
  5. 引擎:Hi!調(diào)度器,我這有request請(qǐng)求你幫我排序入隊(duì)一下。
  6. 調(diào)度器:好的,正在處理你等一下。
  7. 引擎:Hi!調(diào)度器,把你處理好的request請(qǐng)求給我。
  8. 調(diào)度器:給你,這是我處理好的request。
  9. 引擎:Hi!下載器,你按照老大的下載中間件的設(shè)置幫我下載一下這個(gè)request請(qǐng)求。
  10. 下載器:好的!給你,這是下載好的東西。(如果失?。簊orry,這個(gè)request下載失敗了。然后引擎告訴調(diào)度器,這個(gè)request下載失敗了,你記錄一下,我們待會(huì)兒再下載)
  11. 引擎:Hi!Spider,這是下載好的東西,并且已經(jīng)按照老大的下載中間件處理過了,你自己處理一下。(注意!這兒responses默認(rèn)是交給parse()這個(gè)函數(shù)處理的)
  12. Spider:(處理完畢數(shù)據(jù)之后對(duì)于需要跟進(jìn)的URL) Hi!引擎,我這里有兩個(gè)結(jié)果,這個(gè)是我需要跟進(jìn)的URL,還有這個(gè)是我獲取到的Item數(shù)據(jù)。
  13. 引擎:Hi !管道,我這兒有個(gè)item你幫我處理一下;Hi !調(diào)度器,這是需要跟進(jìn)URL你幫我處理下。然后從第四步開始循環(huán),直到獲取完老大需要全部信息。
  14. 管道調(diào)度器:好的,現(xiàn)在就做!

注意:只有當(dāng)調(diào)度器中不存在任何request了,整個(gè)程序才會(huì)停止,也就是說,對(duì)于下載失敗的URL,Scrapy也會(huì)重新下載,且會(huì)自動(dòng)去重,所以不會(huì)重復(fù)下載。


三、安裝Scrapy框架:

  1. 通過‘pip install scrapy’即可安裝
  2. 如果在windows下,還需要安裝‘pypwin32’庫
  3. 如果在ubuntu下,還需要安裝一些第三方庫:python-dev、python-pip、libxml2-dev、libxslt1-dev、zlib1g-dev、libffi-dev、libssl-dev。

四、制作 Scrapy 爬蟲的步驟:

  1. 新建爬蟲項(xiàng)目:新建一個(gè)項(xiàng)目和爬蟲
    創(chuàng)建項(xiàng)目:scrapy startproject [項(xiàng)目名]
    創(chuàng)建爬蟲:進(jìn)入項(xiàng)目所在路徑,然后執(zhí)行命令:scrapy genspider [爬蟲名] [爬蟲的域]
    注意:項(xiàng)目名和爬蟲名不能相同
  2. 明確目標(biāo) (編寫items.py):明確你想要抓取的目標(biāo)
  3. 制作爬蟲 (spiders/xxspider.py):制作爬蟲開始爬取網(wǎng)頁
  4. 存儲(chǔ)內(nèi)容 (pipelines.py):設(shè)計(jì)管道存儲(chǔ)爬取內(nèi)容

五、爬蟲項(xiàng)目的目錄結(jié)構(gòu):

  1. items.py:用來存放爬蟲爬取的數(shù)據(jù)的模型
  2. middlewares.py:用來存放各種中間件的文件
  3. pipelines.py:用來將items的模型存儲(chǔ)到本地磁盤
  4. settings.py:存儲(chǔ)本爬蟲的一些配置信息,比如:請(qǐng)求頭、ip代理池等
  5. spiders目錄:存儲(chǔ)所有的爬蟲代碼
  6. scrapy.cfg:項(xiàng)目的配置文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容