Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理
原文地址https://www.cnblogs.com/zhaof/p/7173397.html
這一篇文章主要是為了對(duì)scrapy框架的工作流程以及各個(gè)組件功能的介紹
Scrapy目前已經(jīng)可以很好的在python3上運(yùn)行
Scrapy使用了Twisted作為框架,Twisted有些特殊的地方是它是事件驅(qū)動(dòng)的,并且比較適合異步的代碼。對(duì)于會(huì)阻塞線程的操作包含訪問文件、數(shù)據(jù)庫或者Web、產(chǎn)生新的進(jìn)程并需要處理新進(jìn)程的輸出(如運(yùn)行shell命令)、執(zhí)行系統(tǒng)層次操作的代碼(如等待系統(tǒng)隊(duì)列),Twisted提供了允許執(zhí)行上面的操作但不會(huì)阻塞代碼執(zhí)行的方法。
Scrapy data flow(流程圖)
?
Scrapy數(shù)據(jù)流是由執(zhí)行的核心引擎(engine)控制,流程是這樣的:
1、爬蟲引擎ENGINE獲得初始請(qǐng)求開始抓取。?
2、爬蟲引擎ENGINE開始請(qǐng)求調(diào)度程序SCHEDULER,并準(zhǔn)備對(duì)下一次的請(qǐng)求進(jìn)行抓取。?
3、爬蟲調(diào)度器返回下一個(gè)請(qǐng)求給爬蟲引擎。?
4、引擎請(qǐng)求發(fā)送到下載器DOWNLOADER,通過下載中間件下載網(wǎng)絡(luò)數(shù)據(jù)。?
5、一旦下載器完成頁面下載,將下載結(jié)果返回給爬蟲引擎ENGINE。?
6、爬蟲引擎ENGINE將下載器DOWNLOADER的響應(yīng)通過中間件MIDDLEWARES返回給爬蟲SPIDERS進(jìn)行處理。?
7、爬蟲SPIDERS處理響應(yīng),并通過中間件MIDDLEWARES返回處理后的items,以及新的請(qǐng)求給引擎。?
8、引擎發(fā)送處理后的items到項(xiàng)目管道,然后把處理結(jié)果返回給調(diào)度器SCHEDULER,調(diào)度器計(jì)劃處理下一個(gè)請(qǐng)求抓取。?
9、重復(fù)該過程(繼續(xù)步驟1),直到爬取完所有的url請(qǐng)求。
各個(gè)組件介紹
爬蟲引擎(ENGINE)
爬蟲引擎負(fù)責(zé)控制各個(gè)組件之間的數(shù)據(jù)流,當(dāng)某些操作觸發(fā)事件后都是通過engine來處理。
調(diào)度器(SCHEDULER)
調(diào)度接收來engine的請(qǐng)求并將請(qǐng)求放入隊(duì)列中,并通過事件返回給engine。
下載器(DOWNLOADER)
通過engine請(qǐng)求下載網(wǎng)絡(luò)數(shù)據(jù)并將結(jié)果響應(yīng)給engine。
Spider
Spider發(fā)出請(qǐng)求,并處理engine返回給它下載器響應(yīng)數(shù)據(jù),以items和規(guī)則內(nèi)的數(shù)據(jù)請(qǐng)求(urls)返回給engine。
管道項(xiàng)目(item pipeline)
負(fù)責(zé)處理engine返回spider解析后的數(shù)據(jù),并且將數(shù)據(jù)持久化,例如將數(shù)據(jù)存入數(shù)據(jù)庫或者文件。
下載中間件
下載中間件是engine和下載器交互組件,以鉤子(插件)的形式存在,可以代替接收請(qǐng)求、處理數(shù)據(jù)的下載以及將結(jié)果響應(yīng)給engine。
spider中間件
spider中間件是engine和spider之間的交互組件,以鉤子(插件)的形式存在,可以代替處理response以及返回給engine items及新的請(qǐng)求集。
如何創(chuàng)建Scrapy項(xiàng)目
創(chuàng)建Scrapy項(xiàng)目
創(chuàng)建scrapy項(xiàng)目的命令是scrapy startproject 項(xiàng)目名,創(chuàng)建一個(gè)爬蟲
進(jìn)入到項(xiàng)目目錄scrapy genspider 爬蟲名字 爬蟲的域名,例子如下:
scrapy項(xiàng)目結(jié)構(gòu)
items.py 負(fù)責(zé)數(shù)據(jù)模型的建立,類似于實(shí)體類。
middlewares.py 自己定義的中間件。
pipelines.py 負(fù)責(zé)對(duì)spider返回?cái)?shù)據(jù)的處理。
settings.py 負(fù)責(zé)對(duì)整個(gè)爬蟲的配置。
spiders目錄 負(fù)責(zé)存放繼承自scrapy的爬蟲類。
scrapy.cfg scrapy基礎(chǔ)配置
?
轉(zhuǎn)載于:https://www.cnblogs.com/111testing/p/10325358.html
總結(jié)
以上是生活随笔為你收集整理的Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue——显示微信用户名称中enjoin
- 下一篇: dirty_background_rat