最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python的爬蟲框架 Scrapy

 更新時間:2020年08月03日 09:05:57   作者:看云  
這篇文章主要介紹了Python的爬蟲框架 Scrapy的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下

網(wǎng)絡爬蟲,是在網(wǎng)上進行數(shù)據(jù)抓取的程序,使用它能夠抓取特定網(wǎng)頁的HTML數(shù)據(jù)。雖然我們利用一些庫開發(fā)一個爬蟲程序,但是使用框架可以大大提高效率,縮短開發(fā)時間。Scrapy是一個使用Python編寫的,輕量級的,簡單輕巧,并且使用起來非常的方便。

一、概述

下圖顯示了Scrapy的大體架構(gòu),其中包含了它的主要組件及系統(tǒng)的數(shù)據(jù)處理流程(綠色箭頭所示)。下面就來一個個解釋每個組件的作用及數(shù)據(jù)的處理過程(注:圖片來自互聯(lián)網(wǎng))。

二、組件

1、Scrapy Engine(Scrapy引擎)

Scrapy引擎是用來控制整個系統(tǒng)的數(shù)據(jù)處理流程,并進行事務處理的觸發(fā)。更多的詳細內(nèi)容可以看下面的數(shù)據(jù)處理流程。

2、Scheduler(調(diào)度)

調(diào)度程序從Scrapy引擎接受請求并排序列入隊列,并在Scrapy引擎發(fā)出請求后返還給他們。

3、Downloader(下載器)

下載器的主要職責是抓取網(wǎng)頁并將網(wǎng)頁內(nèi)容返還給蜘蛛( Spiders)。

4、Spiders(蜘蛛)

蜘蛛是有Scrapy用戶自己定義用來解析網(wǎng)頁并抓取制定URL返回的內(nèi)容的類,每個蜘蛛都能處理一個域名或一組域名。換句話說就是用來定義特定網(wǎng)站的抓取和解析規(guī)則。

蜘蛛的整個抓取流程(周期)是這樣的:

首先獲取第一個URL的初始請求,當請求返回后調(diào)取一個回調(diào)函數(shù)。第一個請求是通過調(diào)用start_requests()方法。該方法默認從start_urls中的Url中生成請求,并執(zhí)行解析來調(diào)用回調(diào)函數(shù)。

在回調(diào)函數(shù)中,你可以解析網(wǎng)頁響應并返回項目對象和請求對象或兩者的迭代。這些請求也將包含一個回調(diào),然后被Scrapy下載,然后有指定的回調(diào)處理。

在回調(diào)函數(shù)中,你解析網(wǎng)站的內(nèi)容,同程使用的是Xpath選擇器(但是你也可以使用BeautifuSoup, lxml或其他任何你喜歡的程序),并生成解析的數(shù)據(jù)項。

最后,從蜘蛛返回的項目通常會進駐到項目管道。

5、Item Pipeline(項目管道)

項目管道的主要責任是負責處理有蜘蛛從網(wǎng)頁中抽取的項目,他的主要任務是清晰、驗證和存儲數(shù)據(jù)。當頁面被蜘蛛解析后,將被發(fā)送到項目管道,并經(jīng)過幾個特定的次序處理數(shù)據(jù)。每個項目管道的組件都是有一個簡單的方法組成的Python類。他們獲取了項目并執(zhí)行他們的方法,同時他們還需要確定的是是否需要在項目管道中繼續(xù)執(zhí)行下一步或是直接丟棄掉不處理。

項目管道通常執(zhí)行的過程有:

清洗HTML數(shù)據(jù)
驗證解析到的數(shù)據(jù)(檢查項目是否包含必要的字段)
檢查是否是重復數(shù)據(jù)(如果重復就刪除)
將解析到的數(shù)據(jù)存儲到數(shù)據(jù)庫中

6、Downloader middlewares(下載器中間件)

下載中間件是位于Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請求及響應。它提供了一個自定義的代碼的方式來拓展Scrapy的功能。下載中間器是一個處理請求和響應的鉤子框架。他是輕量級的,對Scrapy盡享全局控制的底層的系統(tǒng)。

7、Spider middlewares(蜘蛛中間件)

蜘蛛中間件是介于Scrapy引擎和蜘蛛之間的鉤子框架,主要工作是處理蜘蛛的響應輸入和請求輸出。它提供一個自定義代碼的方式來拓展Scrapy的功能。蛛中間件是一個掛接到Scrapy的蜘蛛處理機制的框架,你可以插入自定義的代碼來處理發(fā)送給蜘蛛的請求和返回蜘蛛獲取的響應內(nèi)容和項目。

8、Scheduler middlewares(調(diào)度中間件)

調(diào)度中間件是介于Scrapy引擎和調(diào)度之間的中間件,主要工作是處從Scrapy引擎發(fā)送到調(diào)度的請求和響應。他提供了一個自定義的代碼來拓展Scrapy的功能。

三、數(shù)據(jù)處理流程

Scrapy的整個數(shù)據(jù)處理流程有Scrapy引擎進行控制,其主要的運行方式為:

1.引擎打開一個域名,時蜘蛛處理這個域名,并讓蜘蛛獲取第一個爬取的URL。

2.引擎從蜘蛛那獲取第一個需要爬取的URL,然后作為請求在調(diào)度中進行調(diào)度。

3.引擎從調(diào)度那獲取接下來進行爬取的頁面。

4.調(diào)度將下一個爬取的URL返回給引擎,引擎將他們通過下載中間件發(fā)送到下載器。

5.當網(wǎng)頁被下載器下載完成以后,響應內(nèi)容通過下載中間件被發(fā)送到引擎。

6.引擎收到下載器的響應并將它通過蜘蛛中間件發(fā)送到蜘蛛進行處理。

7.蜘蛛處理響應并返回爬取到的項目,然后給引擎發(fā)送新的請求。

8.引擎將抓取到的項目項目管道,并向調(diào)度發(fā)送請求。

9.系統(tǒng)重復第二部后面的操作,直到調(diào)度中沒有請求,然后斷開引擎與域之間的聯(lián)系。

四、驅(qū)動器

Scrapy是由Twisted寫的一個受歡迎的Python事件驅(qū)動網(wǎng)絡框架,它使用的是非堵塞的異步處理。

以上就是詳解Python的爬蟲框架 Scrapy的詳細內(nèi)容,更多關(guān)于Python 爬蟲框架 Scrapy的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文教你利用Python制作一個生日提醒

    一文教你利用Python制作一個生日提醒

    在國內(nèi),大部分人都是過農(nóng)歷生日,然后借助日歷工具獲取農(nóng)歷日期對應的陽歷日期,以這一天來過生!這里還有一個痛點,即:每一年的農(nóng)歷生日對應的陽歷日期都不一樣,本篇文章將教你利用 Python 制作一個簡單的生日提醒,需要的可以參考一下
    2022-12-12
  • python怎樣判斷一個數(shù)值(字符串)為整數(shù)

    python怎樣判斷一個數(shù)值(字符串)為整數(shù)

    這篇文章主要介紹了python怎樣判斷一個數(shù)值(字符串)為整數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python繪制三角函數(shù)圖(sin\cos\tan)并標注特定范圍的例子

    Python繪制三角函數(shù)圖(sin\cos\tan)并標注特定范圍的例子

    今天小編就為大家分享一篇Python繪制三角函數(shù)圖(sin\cos\tan)并標注特定范圍的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python實現(xiàn)的插入排序,冒泡排序,快速排序,選擇排序算法示例

    Python實現(xiàn)的插入排序,冒泡排序,快速排序,選擇排序算法示例

    這篇文章主要介紹了Python實現(xiàn)的插入排序,冒泡排序,快速排序,選擇排序算法,結(jié)合實例形式總結(jié)分析了Python插入排序,冒泡排序,快速排序,選擇排序等算法的實現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-05-05
  • PyCharm出現(xiàn)卡頓問題的解決

    PyCharm出現(xiàn)卡頓問題的解決

    這篇文章主要介紹了PyCharm出現(xiàn)卡頓問題的解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python+turtle繪制七夕表白玫瑰花

    Python+turtle繪制七夕表白玫瑰花

    七夕節(jié),又稱“七巧節(jié)”“女兒節(jié)”“乞巧節(jié)”等,是中國民間的傳統(tǒng)節(jié)日。一年一度的七夕又快到了,用Python畫一朵玫瑰花送給你的那個TA吧
    2022-08-08
  • python實現(xiàn)基于信息增益的決策樹歸納

    python實現(xiàn)基于信息增益的決策樹歸納

    這篇文章主要為大家詳細介紹了Python實現(xiàn)基于信息增益的決策樹歸納,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python多繼承原理與用法示例

    Python多繼承原理與用法示例

    這篇文章主要介紹了Python多繼承原理與用法,簡單描述了Python多繼承的相關(guān)概念、原理并結(jié)合實例形式分析了Python多繼承的具體定義、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-08-08
  • Python調(diào)用.NET庫的方法步驟

    Python調(diào)用.NET庫的方法步驟

    這篇文章主要介紹了Python調(diào)用.NET庫的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • python時間time模塊處理大全

    python時間time模塊處理大全

    這篇文章主要給大家介紹了關(guān)于python時間time模塊處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論

武强县| 抚宁县| 梁山县| 宝丰县| 馆陶县| 庆元县| 棋牌| 天峨县| 大田县| 阿克陶县| 花莲县| 永康市| 景东| 理塘县| 宁远县| 扶风县| 二连浩特市| 五大连池市| 沙坪坝区| 额济纳旗| 思南县| 东城区| 辽源市| 鹤山市| 宜章县| 贺州市| 揭东县| 梧州市| 乐山市| 巫山县| 谷城县| 孝昌县| 新沂市| 呼伦贝尔市| 平果县| 隆昌县| 双流县| 寿宁县| 静乐县| 佛学| 永福县|