Scrapy庆捺,Python開發(fā)的一個快速、高層次的屏幕抓取和web抓取框架屁魏,用于抓取web站點(diǎn)并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)滔以。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘氓拼、監(jiān)測和自動化測試你画。
Scrapy吸引人的地方在于它是一個框架,任何人都可以根據(jù)需求方便的修改桃漾。它也提供了多種類型爬蟲的基類坏匪,如BaseSpider、sitemap爬蟲等撬统,最新版本又提供了web2.0爬蟲的支持剥槐。
Scrap,是碎片的意思宪摧,這個Python的爬蟲框架叫Scrapy。
學(xué)習(xí)整理:
-
scrapy架構(gòu)颅崩?
先科普下什么是爬蟲几于,爬蟲的本質(zhì)就是將互聯(lián)網(wǎng)網(wǎng)頁(數(shù)據(jù))下載下來的程序。
通過對互聯(lián)網(wǎng)無數(shù)個url數(shù)據(jù)的下載沿后,url之間可能又有關(guān)聯(lián)沿彭,于是形成了猶如蜘蛛網(wǎng)狀的結(jié)構(gòu),而爬蟲就守在這張大網(wǎng)之上尖滚,因此我們通常又將爬蟲成為蜘蛛喉刘。
爬蟲的基本結(jié)構(gòu):
由上圖可以看出爬蟲一般由爬蟲調(diào)度器、URL管理器漆弄、網(wǎng)頁下載器睦裳、網(wǎng)頁解析器、數(shù)據(jù)存儲這幾個模塊組成撼唾。
- 爬蟲調(diào)度器主要是對url管理器廉邑、網(wǎng)頁下載器網(wǎng)頁解析器進(jìn)行管理。
- URL管理器主要通過初始url及網(wǎng)頁解析器獲得的url進(jìn)行存儲管理倒谷,并為調(diào)度器提供接口蛛蒙,為網(wǎng)頁下載器提供下載入口。
- 網(wǎng)頁下載器主要功能就是下載該url下的網(wǎng)頁數(shù)據(jù)(源碼)
- 網(wǎng)頁解析器一方面解析出我們需要的價值數(shù)據(jù)渤愁,一方面又將網(wǎng)頁下載器下載數(shù)據(jù)中的url存儲到url管理器中牵祟。
- 數(shù)據(jù)存儲是將網(wǎng)頁解析器的解析的價值數(shù)據(jù)存儲到內(nèi)存、數(shù)據(jù)庫抖格、文件等诺苹。
scrapy data flow(流程圖)
Scrapy數(shù)據(jù)流是由執(zhí)行的核心引擎(engine)控制咕晋,流程是這樣的:
- 爬蟲引擎獲得初始請求開始抓取。
- 爬蟲引擎開始請求調(diào)度程序筝尾,并準(zhǔn)備對下一次的請求進(jìn)行抓取捡需。
- 爬蟲調(diào)度器返回下一個請求給爬蟲引擎。
- 引擎請求發(fā)送到下載器筹淫,通過下載中間件下載網(wǎng)絡(luò)數(shù)據(jù)站辉。
- 一旦下載器完成頁面下載,將下載結(jié)果返回給爬蟲引擎损姜。
- 引擎將下載器的響應(yīng)通過中間件返回給爬蟲進(jìn)行處理饰剥。
- 爬蟲處理響應(yīng),并通過中間件返回處理后的items摧阅,以及新的請求給引擎汰蓉。
- 引擎發(fā)送處理后的items到項(xiàng)目管道,然后把處理結(jié)果返回給調(diào)度器棒卷,調(diào)度器計(jì)劃處理下一個請求抓取顾孽。
- 重復(fù)該過程(繼續(xù)步驟1),直到爬取完所有的url請求比规。
單獨(dú)介紹下scrapy各個組件:
- 爬蟲引擎(ENGINE)
爬蟲引擎負(fù)責(zé)控制各個組件之間的數(shù)據(jù)流若厚,當(dāng)某些操作觸發(fā)事件后都是通過engine來處理。- 調(diào)度器
調(diào)度接收來engine的請求并將請求放入隊(duì)列中蜒什,并通過事件返回給engine测秸。- 下載器
通過engine請求下載網(wǎng)絡(luò)數(shù)據(jù)并將結(jié)果響應(yīng)給engine。- Spider
Spider發(fā)出請求灾常,并處理engine返回給它下載器響應(yīng)數(shù)據(jù)霎冯,以items和規(guī)則內(nèi)的數(shù)據(jù)請求(urls)返回給engine。- 管道項(xiàng)目(item pipeline)
負(fù)責(zé)處理engine返回spider解析后的數(shù)據(jù)钞瀑,并且將數(shù)據(jù)持久化沈撞,例如將數(shù)據(jù)存入數(shù)據(jù)庫或者文件。- 下載中間件
下載中間件是engine和下載器交互組件雕什,以鉤子(插件)的形式存在关串,可以代替接收請求、處理數(shù)據(jù)的下載以及將結(jié)果響應(yīng)給engine监徘。- spider中間件
spider中間件是engine和spider之間的交互組件晋修,以鉤子(插件)的形式存在,可以代替處理response以及返回給engine items及新的請求集凰盔。
scrapy項(xiàng)目結(jié)構(gòu):
參見:
Scrapy爬蟲(二):爬蟲簡介:https://blog.csdn.net/yancey_blog/article/details/53887924
Scrapy爬蟲(三):scrapy架構(gòu)及原理:https://blog.csdn.net/yancey_blog/article/details/53888473
TO BE CONTINUED ......