??個(gè)人主頁(yè):為夢(mèng)而生~ 關(guān)注我一起學(xué)習(xí)吧!
??專(zhuān)欄:python網(wǎng)絡(luò)爬蟲(chóng)從基礎(chǔ)到實(shí)戰(zhàn) 歡迎訂閱!后面的內(nèi)容會(huì)越來(lái)越有意思~
??往期推薦:
??前面比較重要的基礎(chǔ)內(nèi)容:
【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)⑧】XPath庫(kù)及其基本用法
【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)⑨】jsonpath和BeautifulSoup庫(kù)概述及其對(duì)比
【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)⑩】selenium概述
【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)?】requests庫(kù)概述(文件上傳、cookies處理、狀態(tài)碼處理、異常處理等)
【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)?】Scrapy庫(kù)概述(簡(jiǎn)介、安裝與基本使用)
??爬蟲(chóng)的實(shí)戰(zhàn)文章:
【Python爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)①】使用urllib以及XPath爬取可愛(ài)小貓圖片
【Python爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)②】使用urllib以及jsonpath爬取即將上映電影信息
大家可以復(fù)制代碼感受一下爬蟲(chóng)的魅力~
??本期內(nèi)容:上一篇文章我們簡(jiǎn)單的介紹了Scrapy,這一篇文章我們接著來(lái)深入的講一下它的架構(gòu):組織架構(gòu)和工作原理
1 Scrapy的組件介紹
Scrapy 是一個(gè)用于爬取網(wǎng)站數(shù)據(jù)和執(zhí)行抓取任務(wù)的Python框架。它提供了一系列的組件,用于構(gòu)建和管理爬蟲(chóng)項(xiàng)目。下面是對(duì) Scrapy的幾個(gè)重要組件的介紹:
- Spider(爬蟲(chóng))
Spider 是 Scrapy 的最基本組件,用于定義如何抓取特定網(wǎng)站的數(shù)據(jù)。每一個(gè) Spider 都包含了一些用于抓取站點(diǎn)的初始URL和如何跟進(jìn)頁(yè)面中的鏈接的規(guī)則。Spider 通過(guò)解析頁(yè)面的內(nèi)容來(lái)抓取所需的數(shù)據(jù)。
- Item(數(shù)據(jù)項(xiàng))
Item 用于定義要從網(wǎng)頁(yè)中提取的結(jié)構(gòu)化數(shù)據(jù)。你可以根據(jù)需要?jiǎng)?chuàng)建多個(gè) Item,每個(gè) Item 包含了一組字段,用于保存特定的數(shù)據(jù)。在 Spider 解析頁(yè)面時(shí),可以從頁(yè)面中提取相關(guān)數(shù)據(jù),并將其存儲(chǔ)到 Item 中。
- Pipeline(管道)
Pipeline 可以定義對(duì) Item 進(jìn)行的數(shù)據(jù)處理操作。在 Spider 解析頁(yè)面并提取數(shù)據(jù)后,可以將數(shù)據(jù)傳遞給 Pipeline,在 Pipeline 中執(zhí)行數(shù)據(jù)清洗、驗(yàn)證、存儲(chǔ)等操作??梢杂卸鄠€(gè) Pipeline,它們按照優(yōu)先級(jí)順序依次處理 Item。
- Project(項(xiàng)目)
Project 是指整個(gè)基于 Scrapy 的爬蟲(chóng)項(xiàng)目。它包含了所有的配置信息、Spider、Item、Pipeline、中間件等組件。一個(gè)項(xiàng)目可以包含多個(gè) Spider,每個(gè) Spider 負(fù)責(zé)爬取特定的網(wǎng)站或特定的數(shù)據(jù)。通過(guò)命令行工具或腳本,可以管理和運(yùn)行項(xiàng)目,執(zhí)行爬取任務(wù)。
2 Scrapy架構(gòu)組成
Scrapy 是一個(gè)基于異步網(wǎng)絡(luò)框架 Twisted,采用了事件驅(qū)動(dòng)的設(shè)計(jì)理念,具有高度的靈活性和可擴(kuò)展性。下面是 Scrapy的詳細(xì)架構(gòu)組成:
- Spiders(爬蟲(chóng))
Spider 是 Scrapy 框架中的主要組件,用于定義網(wǎng)站的抓取邏輯。每個(gè) Spider 都包含了一些用于抓取站點(diǎn)的初始 URL 和如何跟進(jìn)頁(yè)面中的鏈接的規(guī)則。Spider 通過(guò)解析頁(yè)面的內(nèi)容來(lái)抓取所需的數(shù)據(jù)。
- Scheduler(調(diào)度器)
Scheduler 用于管理爬取任務(wù)的調(diào)度和隊(duì)列,它接收由 Spider 生成的請(qǐng)求,并根據(jù)一定的策略進(jìn)行排隊(duì)。Scheduler 負(fù)責(zé)將請(qǐng)求發(fā)送給下載器進(jìn)行處理,以確保爬蟲(chóng)能按照預(yù)定的順序爬取數(shù)據(jù)。
- Downloader(下載器)
Downloader 負(fù)責(zé)下載請(qǐng)求的內(nèi)容并將其返回給 Spider 進(jìn)行解析。它可以處理使用 HTTP、HTTPS、FTP 等協(xié)議的請(qǐng)求,支持自動(dòng)處理重定向、Cookies、代理等功能,并能夠使用并發(fā)技術(shù)提高下載效率。
- Item Pipeline(數(shù)據(jù)管道)
Item Pipeline 是用于處理由 Spider 提取的 Item 對(duì)象的組件。它負(fù)責(zé)對(duì) Item 進(jìn)行處理、清洗、驗(yàn)證、存儲(chǔ)等操作??梢杂卸鄠€(gè) Item Pipeline,它們按照優(yōu)先級(jí)順序依次處理 Item。
- Downloader Middleware(下載器中間件)
Downloader Middleware 是位于下載器和調(diào)度器之間的一層處理組件。它可以攔截下載請(qǐng)求和下載響應(yīng),對(duì)它們進(jìn)行修改和處理。常見(jiàn)的應(yīng)用場(chǎng)景包括設(shè)置請(qǐng)求的 Headers、處理代理、處理 Cookies 等。
- Spider Middleware(爬蟲(chóng)中間件)
Spider Middleware 是位于 Spider 和調(diào)度器之間的一層處理組件。它可以攔截 Spider 的輸入和輸出,對(duì)它們進(jìn)行修改和處理。常見(jiàn)的應(yīng)用場(chǎng)景包括處理抓取結(jié)果、處理異常、處理重定向等。
- Item Loader(數(shù)據(jù)加載器)
Item Loader 是用于填充 Item 對(duì)象的組件。它負(fù)責(zé)從爬取的數(shù)據(jù)中解析出字段的值,并進(jìn)行預(yù)處理、格式化等操作??梢酝ㄟ^(guò)定義 Item Loader 來(lái)指定每個(gè)字段的處理規(guī)則。
- Engine(引擎)
Engine 是 Scrapy 的核心調(diào)度器,負(fù)責(zé)控制整個(gè)爬取流程的運(yùn)行。它通過(guò)調(diào)度器、下載器、Spider 等組件的協(xié)同工作,實(shí)現(xiàn)了請(qǐng)求的調(diào)度和處理、頁(yè)面的解析和數(shù)據(jù)的提取等功能。
- Spider Loader(爬蟲(chóng)加載器)
Spider Loader 負(fù)責(zé)加載和實(shí)例化 Spider,以及管理 Spider 的配置和設(shè)置。它可以根據(jù)配置文件或命令行參數(shù)自動(dòng)發(fā)現(xiàn)和加載項(xiàng)目中的 Spider。
3 Scrapy工作原理
Scrapy的工作原理如下:
- 引擎(Engine)從 Spider 獲取要抓取的初始 URL,并向調(diào)度器(Scheduler)提交請(qǐng)求。
- 調(diào)度器根據(jù)一定的策略將請(qǐng)求入隊(duì),等待下載器(Downloader)進(jìn)行處理。
- 下載器從調(diào)度器獲取請(qǐng)求,并將其發(fā)送到指定的網(wǎng)站服務(wù)器,獲取響應(yīng)。
- 下載器將響應(yīng)返回給引擎,引擎將其傳遞給 Spider 進(jìn)行解析和處理。
- Spider 解析網(wǎng)頁(yè),提取所需的數(shù)據(jù),并生成新的請(qǐng)求,以及要存儲(chǔ)的數(shù)據(jù)項(xiàng)(Item),并將它們返回給引擎。
- 引擎將新生成的請(qǐng)求交給調(diào)度器處理,將存儲(chǔ)的數(shù)據(jù)項(xiàng)傳遞給 Item Pipeline 進(jìn)行處理。
- 在 Item Pipeline 中,對(duì)數(shù)據(jù)項(xiàng)進(jìn)行各種處理操作,如數(shù)據(jù)清洗、驗(yàn)證、存儲(chǔ)等。
- 經(jīng)過(guò) Item Pipeline 處理后,最終的數(shù)據(jù)項(xiàng)被存儲(chǔ)起來(lái),或者根據(jù)配置將其發(fā)送到其他目標(biāo)。
- 如果有新的請(qǐng)求生成,引擎將重復(fù)以上步驟,直到調(diào)度器中沒(méi)有更多的請(qǐng)求。
Scrapy 的工作原理是基于異步的事件驅(qū)動(dòng)模型實(shí)現(xiàn)的。整個(gè)過(guò)程中各個(gè)組件的協(xié)同工作使得爬取任務(wù)得以高效地進(jìn)行。在處理請(qǐng)求和響應(yīng)過(guò)程中,Scrapy 支持并發(fā)處理,通過(guò)使用異步網(wǎng)絡(luò)框架 Twisted,從而提高了爬蟲(chóng)的速度和效率。此外,Scrapy 還提供了許多可定制和擴(kuò)展的機(jī)制,如中間件、數(shù)據(jù)管道等,使得開(kāi)發(fā)者能夠根據(jù)自己的需求進(jìn)行靈活的配置和操作。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-580855.html
總結(jié)來(lái)說(shuō),Scrapy 的工作原理是:引擎從 Spider 獲取初始 URL,通過(guò)調(diào)度器將請(qǐng)求入隊(duì),下載器發(fā)送請(qǐng)求獲取響應(yīng),Spider 解析網(wǎng)頁(yè)提取數(shù)據(jù)并生成新的請(qǐng)求和數(shù)據(jù)項(xiàng),引擎將其傳遞給相應(yīng)組件進(jìn)行處理,最終實(shí)現(xiàn)數(shù)據(jù)的提取、處理和存儲(chǔ)。這個(gè)循環(huán)過(guò)程不斷重復(fù),直到所有的請(qǐng)求都被處理完畢或達(dá)到停止條件。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-580855.html
到了這里,關(guān)于【Python爬蟲(chóng)開(kāi)發(fā)基礎(chǔ)?】Scrapy架構(gòu)(組件介紹、架構(gòu)組成和工作原理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!