Scrapy框架使用的基本知識
scrapy是一個基于Twisted的異步處理框架,可擴(kuò)展性很強(qiáng)。優(yōu)點(diǎn)此處不再一一贅述。
下面介紹一些概念性知識,幫助大家理解scrapy。
一、數(shù)據(jù)流向
要想熟練掌握這個框架,一定要明白數(shù)據(jù)的流向是怎么一個過程??偨Y(jié)如下:
1.引擎先打開網(wǎng)站,請求url。
2.引擎通過調(diào)度器以Request形式調(diào)度url。
3.引擎請求下一個url。
4.調(diào)度器將url通過Downloader Middlewares發(fā)送給引擎
5.Downloader 生成response,通過Downloader Middlewares發(fā)送給引擎
6.引擎接收Response 通過spiderMiddleware發(fā)送給spider處理
7.spider處理response
8.引擎將spider處理的item給ItemPipeline 然后將新的Request給調(diào)度器。
二、各個結(jié)構(gòu)的作用
DownloderMiddleware
調(diào)度器會從隊(duì)列之中拿出Request發(fā)送給Downloader執(zhí)行下載,這個過程會經(jīng)過DownloaderMiddleware的處理。
作用的位置有兩個:
- 在調(diào)度器調(diào)出Request發(fā)送給Downloader之前。
- 下載之后生成Response發(fā)送給spider之前。
核心方法有三個:
process_request(request,spider)
Request 到達(dá)Downloader之前,就會被調(diào)用
參數(shù)介紹:
- request :Request對象,被處理的Request。
- spider:spider對象,上面被處理的Request對應(yīng)的spider。
返回值:
1.返回None 調(diào)用別的process_request()方法,直至將Request執(zhí)行得到Response才會結(jié)束。
2.返回Response對象,低優(yōu)先級的process_request()和process_exception不調(diào)用。
3.返回request對象,低優(yōu)先級的process_request()停止執(zhí)行,返回新的Request。
process_response(request,response,spider)
作用位置:
- Downloader 執(zhí)行Request之后,會得到對應(yīng)的Reponse ,scrapy 引擎會將Response發(fā)送給spider進(jìn)行解析,發(fā)送之前調(diào)用這個方法對Response進(jìn)行處理。
返回值的情況:
1.返回Request低優(yōu)先級的process_respons()不調(diào)用。
2.返回response低優(yōu)先級的process_respons()繼續(xù)調(diào)用。
process_exception(request,exception,spider)
此函數(shù)主要是用來處理異常的。
spiderMiddleware
作用位置:
- Downloader生成Response之后會發(fā)送給spider,
- 在發(fā)送之前,會經(jīng)過spiderMiddleware處理。
核心方法:
process_soider_input(response,spider)
返回值:
1.返回None
繼續(xù)處理Response,調(diào)用所有的spiderMiddleware,知道spider處理
2.跑出異常
直接調(diào)用Request的errback()方法,使用process_spider_output()處理。
process_spider_output(response,result,spider)
當(dāng)spider處理Response返回結(jié)果時,被調(diào)用。
process_spider_exception(response,exception,spider)
返回值:none
繼續(xù)處理response,返回一個可迭代對象,process_spider_output()方法被調(diào)用。
process_start_request(start_requests,spider)
以spider啟動的Request為參數(shù)被調(diào)用,必須返回request。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- Python爬蟲框架scrapy實(shí)現(xiàn)downloader_middleware設(shè)置proxy代理功能示例
- Python爬蟲框架scrapy實(shí)現(xiàn)的文件下載功能示例
- python爬蟲框架scrapy實(shí)現(xiàn)模擬登錄操作示例
- Python爬蟲框架Scrapy常用命令總結(jié)
- Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實(shí)現(xiàn)代碼
- 淺談Scrapy框架普通反爬蟲機(jī)制的應(yīng)對策略
- Python:Scrapy框架中Item Pipeline組件使用詳解
- Python之Scrapy爬蟲框架安裝及簡單使用詳解
- Scrapy框架CrawlSpiders的介紹以及使用詳解
- python爬蟲框架scrapy實(shí)戰(zhàn)之爬取京東商城進(jìn)階篇
- Python的爬蟲框架scrapy用21行代碼寫一個爬蟲
- 使用Python的Scrapy框架十分鐘爬取美女圖
相關(guān)文章
Python 詳解爬取并統(tǒng)計(jì)CSDN全站熱榜標(biāo)題關(guān)鍵詞詞頻流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python爬取CSDN全站綜合熱榜標(biāo)題,順便統(tǒng)計(jì)關(guān)鍵詞詞頻,大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11
K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實(shí)現(xiàn)
這篇文章主要介紹了K近鄰法(KNN)相關(guān)知識總結(jié)以及如何用python實(shí)現(xiàn),幫助大家更好的利用python實(shí)現(xiàn)機(jī)器學(xué)習(xí),感興趣的朋友可以了解下2021-01-01
Python檢查和同步本地時間(北京時間)的實(shí)現(xiàn)方法
這篇文章主要介紹了Python檢查和同步本地時間(北京時間)的實(shí)現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
用Python的Flask框架結(jié)合MySQL寫一個內(nèi)存監(jiān)控程序
這篇文章主要介紹了用Python的Flask框架結(jié)合MySQL些一個內(nèi)存監(jiān)控程序的例子,并且能將結(jié)果作簡單的圖形化顯示,需要的朋友可以參考下2015-11-11
pandas dataframe拼接后index重新排序方式
這篇文章主要介紹了pandas dataframe拼接后index重新排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10

