這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)scrapy和python的關(guān)系是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)建站專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、永勝網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為永勝等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
Scrapy是Python開發(fā)的一個快速、高層次的web數(shù)據(jù)抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘和監(jiān)測。
Scrapy吸引人的地方在于它是一個框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等。
Scrapy算得上是Python世界中最常用的爬蟲框架了,同時它也是我掌握的幾種流行語言中最好的爬蟲框架,沒有之一!我認(rèn)為它也是最難學(xué)習(xí)的框架,同樣沒有之一。很多初學(xué)Scarpy的經(jīng)常向我抱怨完全不清楚Scrapy該怎樣入手,即使看的是中文的文檔,也感到很難理解。我當(dāng)初接觸Scrapy時也有這樣的感覺。之所以感到Scrapy難學(xué),究其原因,是其官方文檔實在太過凌亂,又缺少實用的代碼例子,讓人看得云里霧里,不知其所已然。雖然其文檔不良,但卻沒有遮擋住它的光輝,它依然是Python世界中目前最好用的爬蟲框架。其架構(gòu)的思路、蜘蛛執(zhí)行的效能,還有可擴(kuò)展的能力都非常出眾,再配以Python語言的簡潔輕巧,使得爬蟲的開發(fā)事半功倍。
Scrapy的優(yōu)點:
(1)提供了內(nèi)置的HTTP緩存,以加速本地開發(fā)。
(2)提供了自動節(jié)演調(diào)節(jié)機(jī)制,而且具有遵守robots.txt的設(shè)置的能力。
(3)可以定義爬行深度的限制,以避免爬蟲進(jìn)入死循環(huán)鏈接。
(4)會自動保留會話。
(5)執(zhí)行自動HTTP基本認(rèn)證。不需要明確保存狀態(tài)。
(6)可以自動填寫登錄表單。
(7)Scrapy有一個內(nèi)置的中間件,可以自動設(shè)置請求中的引用(referrer)頭。
(8)支持通過3xx響應(yīng)重定向,也可以通過HTML元刷新。
(9)避免被網(wǎng)站使用的meta重定向困住,以檢測沒有JS支持的頁面。
(10)默認(rèn)使用CSS選擇器或XPath編寫解析器。
(11)可以通過Splash或任何其他技術(shù)(如Selenium)呈現(xiàn)JavaScript頁面。
(12)擁有強(qiáng)大的社區(qū)支持和豐富的插件和擴(kuò)展來擴(kuò)展其功能。
(13)提供了通用的蜘蛛來抓取常見的格式:站點地圖、CSV和XML。
(14)內(nèi)置支持以多種格式(JSON、CSV、XML、JSON-lines)導(dǎo)出收集的數(shù)據(jù)并將其存在多個后端(FTP、S3、本地文件系統(tǒng))中。
Scrapy框架原理
Scrapy Engine(引擎):負(fù)責(zé)Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數(shù)據(jù)傳遞等。
Scheduler(調(diào)度器):負(fù)責(zé)接收引擎發(fā)送過來的Request請求,并按照一定的方式進(jìn)行整理排列,入隊,當(dāng)引擎需要時,交還給引擎。
Downloader(下載器):負(fù)責(zé)下載Scrapy Engine(引擎)發(fā)送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
Spider(爬蟲):負(fù)責(zé)處理所有Responses,從中分析提取數(shù)據(jù),獲取Item字段需要的數(shù)據(jù),并將需要跟進(jìn)的URL提交給引擎,再次進(jìn)入Scheduler(調(diào)度器),
Item Pipeline(管道):負(fù)責(zé)處理Spider中獲取到的Item,并進(jìn)行進(jìn)行后期處理(詳細(xì)分析、過濾、存儲等)的地方.
Downloader Middlewares(下載中間件):你可以當(dāng)作是一個可以自定義擴(kuò)展下載功能的組件。
Spider Middlewares(Spider中間件):你可以理解為是一個可以自定擴(kuò)展和操作引擎和Spider中間通信的功能組件(比如進(jìn)入Spider的Responses;和從Spider出去的Requests)
Scrapy各個組件介紹
·Scrapy Engine:
引擎負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)中所有組件中流動,并在相應(yīng)動作發(fā)生時觸發(fā)事件。它也是程序的入口,可以通過scrapy指令方式在命令行啟動,或普通編程方式實例化后調(diào)用start方法啟動。
·調(diào)度器(Scheduler)
調(diào)度器從引擎接收爬取請求(Request)并將它們?nèi)腙?以便之后引擎請求它們時提供給引擎。一般來說,我們并不需要直接對調(diào)度器進(jìn)行編程,它是由Scrapy主進(jìn)程進(jìn)行自動控制的。
·下載器(Down-loader)
下載器負(fù)責(zé)獲取頁面數(shù)據(jù)并提供給引擎,而后將網(wǎng)站的響應(yīng)結(jié)果對象提供給蜘蛛(Spider)。具體點說,下載器負(fù)責(zé)處理產(chǎn)生最終發(fā)出的請求對象 Request 并將返回的響應(yīng)生成 Response對象傳遞給蜘蛛。
·蜘蛛——Spiders
Spider是用戶編寫用于分析響應(yīng)(Response)結(jié)果并從中提取Item(即獲取的Item)或額外跟進(jìn)的URL的類。每個Spider負(fù)責(zé)處理一個特定(或一些)網(wǎng)站。
·數(shù)據(jù)管道——Item Pipeline
Item Pipeline 負(fù)責(zé)處理被 Spider 提取出來的 Item。 典型的處理有清理、驗證及持久化(例如,存取到數(shù)據(jù)庫中)。
·下載器中間件(Downloader middle-wares)
下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的Response。其提供了一個簡便的機(jī)制,通過插入自定義代碼來擴(kuò)展Scrapy的功能。
·Spider中間件(Spider middle-wares)
Spider 中間件是在引擎及 Spider 之間的特定鉤子(specific hook),處理 Spider 的輸入(Response)和輸出(Items及Requests)。其提供了一個簡便的機(jī)制,通過插入自定義代碼來擴(kuò)展Scrapy的功能。
從Scrapy的系統(tǒng)架構(gòu)可見,它將整個爬網(wǎng)過程進(jìn)行了非常具體的細(xì)分,并接管了絕大多數(shù)復(fù)雜的工作,例如,產(chǎn)生請求和響應(yīng)對象、控制爬蟲的并發(fā)等。
上述就是小編為大家分享的scrapy和python的關(guān)系是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。