淺談Scrapy網(wǎng)絡(luò)爬蟲框架的工作原理和數(shù)據(jù)采集
今天小編給大家詳細(xì)的講解一下Scrapy爬蟲框架,希望對大家的學(xué)習(xí)有幫助。
1、Scrapy爬蟲框架
Scrapy是一個使用Python編程語言編寫的爬蟲框架,任何人都可以根據(jù)自己的需求進(jìn)行修改,并且使用起來非常的方便。它可以應(yīng)用在數(shù)據(jù)采集、數(shù)據(jù)挖掘、網(wǎng)絡(luò)異常用戶檢測、存儲數(shù)據(jù)等方面。
Scrapy使用了Twisted異步網(wǎng)絡(luò)庫來處理網(wǎng)絡(luò)通訊。整體架構(gòu)大致如下圖所示。
2、由上圖可知Scrapy爬蟲框架主要由5個部分組成,分別是:Scrapy Engine(Scrapy引擎),Scheduler(調(diào)度器),Downloader(下載器),Spiders(蜘蛛),Item Pipeline(項目管道)。爬取過程是Scrapy引擎發(fā)送請求,之后調(diào)度器把初始URL交給下載器,然后下載器向服務(wù)器發(fā)送服務(wù)請求,得到響應(yīng)后將下載的網(wǎng)頁內(nèi)容交與蜘蛛來處理,爾后蜘蛛會對網(wǎng)頁進(jìn)行詳細(xì)的解析。蜘蛛分析的結(jié)果有兩種:一種是得到新的URL,之后再次請求調(diào)度器,開始進(jìn)行新一輪的爬取,不斷的重復(fù)上述過程;另一種是得到所需的數(shù)據(jù),之后會轉(zhuǎn)交給項目管道繼續(xù)處理。項目管道負(fù)責(zé)數(shù)據(jù)的清洗、驗證、過濾、去重和存儲等后期處理,最后由Pipeline輸出到文件中,或者存入數(shù)據(jù)庫等。
3、這五大組件及其中間件的功能如下:
1) Scrapy引擎:控制整個系統(tǒng)的數(shù)據(jù)處理流程,觸發(fā)事務(wù)處理流程,負(fù)責(zé)串聯(lián)各個模塊
2) Scheduler(調(diào)度器):維護待爬取的URL隊列,當(dāng)接受引擎發(fā)送的請求時,會從待爬取的URL隊列中取出下一個URL返回給調(diào)度器。
3) Downloader(下載器):向該網(wǎng)絡(luò)服務(wù)器發(fā)送下載頁面的請求,用于下載網(wǎng)頁內(nèi)容,并將網(wǎng)頁內(nèi)容交與蜘蛛去處理。
4) Spiders(蜘蛛):制定要爬取的網(wǎng)站地址,選擇所需數(shù)據(jù)內(nèi)容,定義域名過濾規(guī)則和網(wǎng)頁的解析規(guī)則等。
5) Item Pipeline(項目管道):處理由蜘蛛從網(wǎng)頁中抽取的數(shù)據(jù),主要任務(wù)是清洗、驗證、過濾、去重和存儲數(shù)據(jù)等。
6) 中間件(Middlewares):中間件是處于Scrapy引擎和Scheduler,Downloader,Spiders之間的構(gòu)件,主要是處理它們之間的請求及響應(yīng)。
Scrapy爬蟲框架可以很方便的完成網(wǎng)上數(shù)據(jù)的采集工作,簡單輕巧,使用起來非常方便。
4、 基于Scrapy的網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)
在了解Scrapy爬蟲原理及框架的基礎(chǔ)上,本節(jié)簡要介紹Scrapy爬蟲框架的數(shù)據(jù)采集過程。
4.1 建立爬蟲項目文件
基于scrapy爬蟲框架,只需在命令行中輸入“scrapy startproject article”命令,之后一個名為article的爬蟲項目將自動創(chuàng)建。首先進(jìn)入到article文件夾下,輸入命令“cd article”,之后通過“dir”查看目錄,也可以通過“tree /f”生成文件目錄的樹形結(jié)構(gòu),如下圖所示,可以很清晰的看到Scrapy創(chuàng)建命令生成的文件。
頂層的article文件夾是項目名,第二層中包含的是一個與項目名同名的文件夾article和一個文件scrapy.cfg,這個與項目同名的文件夾article是一個模塊,所有的項目代碼都在這個模塊內(nèi)添加,而scrapy.cfg文件是整個Scrapy項目的配置文件。第三層中有5個文件和一個文件夾,其中__init__.py是個空文件,作用是將其上級目錄變成一個模塊;items.py是定義儲對象的文件,決定爬取哪些項目;middlewares.py文件是中間件,一般不用進(jìn)行修改,主要負(fù)責(zé)相關(guān)組件之間的請求與響應(yīng);pipelines.py是管道文件,決定爬取后的數(shù)據(jù)如何進(jìn)行處理和存儲;settings.py是項目的設(shè)置文件,設(shè)置項目管道數(shù)據(jù)的處理方法、爬蟲頻率、表名等;spiders文件夾中放置的是爬蟲主體文件(用于實現(xiàn)爬蟲邏輯)和一個__init__.py空文件。
4.2 之后開始進(jìn)行網(wǎng)頁結(jié)構(gòu)與數(shù)據(jù)分析、修改Items.py文件、編寫hangyunSpider.py文件、修改pipelines.py文件、修改settings.py文件,這些步驟的具體操作后期會文章專門展開,在此不再贅述。
4.3 執(zhí)行爬蟲程序
修改上述四個文件之后,在Windows命令符窗口中輸入cmd 命令進(jìn)入到爬蟲所在的路徑,并執(zhí)行“scrapy crawl article”命令,這樣就可以運行爬蟲程序了,最后保存數(shù)據(jù)到本地磁盤上。
5、 結(jié)束語
隨著互聯(lián)網(wǎng)信息的與日俱增,利用網(wǎng)絡(luò)爬蟲工具來獲取所需信息必有用武之地。使用開源的Scrapy爬蟲框架,不僅可以實現(xiàn)對web上信息的高效、準(zhǔn)確、自動的獲取,還利于研究人員對采集到的數(shù)據(jù)進(jìn)行后續(xù)的挖掘分析。
- Python爬蟲實例——爬取美團美食數(shù)據(jù)
- Python爬蟲爬取、解析數(shù)據(jù)操作示例
- 利用selenium爬蟲抓取數(shù)據(jù)的基礎(chǔ)教程
- python3爬蟲學(xué)習(xí)之?dāng)?shù)據(jù)存儲txt的案例詳解
- 詳解java爬蟲jsoup解析多空格class數(shù)據(jù)
- Python數(shù)據(jù)抓取爬蟲代理防封IP方法
- Python3爬蟲學(xué)習(xí)之MySQL數(shù)據(jù)庫存儲爬取的信息詳解
- Python實現(xiàn)數(shù)據(jù)可視化看如何監(jiān)控你的爬蟲狀態(tài)【推薦】
- 淺談Python爬蟲原理與數(shù)據(jù)抓取
相關(guān)文章
一文輕松掌握python語言命名規(guī)范規(guī)則
這篇文章主要介紹了一文輕松掌握python語言命名規(guī)范規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06關(guān)于jupyter打開之后不能直接跳轉(zhuǎn)到瀏覽器的解決方式
這篇文章主要介紹了關(guān)于jupyter打開之后不能直接跳轉(zhuǎn)到瀏覽器的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04解決Python3.8用pip安裝turtle-0.0.2出現(xiàn)錯誤問題
turtle庫是python的基礎(chǔ)繪圖庫,這個庫被介紹為一個最常用的用來給孩子們介紹編程知識的方法庫,這篇文章主要介紹了解決Python3.8用pip安裝turtle-0.0.2出現(xiàn)錯誤問題,需要的朋友可以參考下2020-02-02解決import tensorflow導(dǎo)致jupyter內(nèi)核死亡的問題
這篇文章主要介紹了解決import tensorflow導(dǎo)致jupyter內(nèi)核死亡的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02python之DataFrame實現(xiàn)excel合并單元格
這篇文章主要為大家詳細(xì)介紹了python之DataFrame實現(xiàn)excel合并單元格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04Python實現(xiàn)打印詳細(xì)報錯日志,獲取報錯信息位置行數(shù)
這篇文章主要介紹了Python實現(xiàn)打印詳細(xì)報錯日志,獲取報錯信息位置行數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08使用Anaconda3建立虛擬獨立的python2.7環(huán)境方法
今天小編就為大家分享一篇使用Anaconda3建立虛擬獨立的python2.7環(huán)境方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06