版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
爬蟲框架-scrapy框架初探復習Scrpay框架創(chuàng)建爬蟲程序的基本步驟及命令?1、創(chuàng)建爬蟲項目
scrapystartproject爬蟲項目名【路徑】2、創(chuàng)建爬蟲文件
scrapygenspider爬蟲文件名域名3、設置爬取數(shù)據(jù)項item.pyscrapy.Field()4、編寫爬蟲文件中的解析函數(shù)parseresponse.xpath()和response.css()5、運行爬蟲的命令
scrapycrawl爬蟲文件名1、了解Scrapy構(gòu)架中的核心組件的作用2、能描述在scrapy框架中爬取對象的數(shù)據(jù)流動過程3、理解scrapy中g(shù)et與post對應的函數(shù)思想4、能學會利用scrapy實現(xiàn)網(wǎng)頁的多頁爬取教學難點:利用requests方法重寫start_requests()函數(shù)教學目標1Scrapy請求原理爬蟲框架-scrapy框架初探Scrapy架構(gòu)原理23
案例精講-貝殼新房Scrapy架構(gòu)原理Scrapy框架組件之間是到底是如何協(xié)同工作?下圖是Scrapy框架的組成結(jié)構(gòu),并從數(shù)據(jù)流的角度揭示Scrapy的工作原理。Scrapy主要包括以下組件:引擎(ScrapyEngine):處理整個系統(tǒng)的數(shù)據(jù)流處理、觸發(fā)事務,是整個框架的核心;項目(Item):定義了爬取結(jié)果的數(shù)據(jù)結(jié)構(gòu),爬取的數(shù)據(jù)會被賦值成該Item對象;調(diào)度器(Scheduler):用來接受引擎發(fā)過來的請求,壓入隊列中,并在引擎再次請求的時候返回??上胂癯梢粋€URL(抓取網(wǎng)頁的網(wǎng)址或者說是鏈接)的優(yōu)先隊列,由它來決定下一個要抓取的網(wǎng)址是什么,同時去除重復的網(wǎng)址;下載器(Downloader):用于下載網(wǎng)頁內(nèi)容,并將網(wǎng)頁內(nèi)容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的);蜘蛛(Spiders):蜘蛛是主要干活的。用于從特定的網(wǎng)頁中提取自己需要的信息,即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個頁面。Scrapy架構(gòu)原理項目管道(Pipeline):負責處理蜘蛛從網(wǎng)頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被蜘蛛解析后,將被發(fā)送到項目管道,并經(jīng)過幾個特定的次序處理數(shù)據(jù);下載器中間件(DownloaderMiddlewares):位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應;蜘蛛中間件(SpiderMiddlewares):介于Scrapy引擎和蜘蛛之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出;調(diào)度中間件(SchedulerMiddewares):介于Scrapy引擎和調(diào)度之間的中間件,從Scrapy引擎發(fā)送到調(diào)度的請求和響應。Scrapy架構(gòu)原理Scrapy主要包括以下組件:Scrapy架構(gòu)原理Scrapy架構(gòu)原理組件描述類型Engine引擎,框架的核心,其他所有組件在其控制下協(xié)同工作內(nèi)部組件Scheduler調(diào)度器,負責對
Spider提交的下載請求進行調(diào)度內(nèi)部組件Downloader下載器,負責下載頁面(發(fā)送
HTTP請求/接收
HTTP響應)內(nèi)部組件Spider爬蟲,負責提取頁面中的數(shù)據(jù),并產(chǎn)生對新頁面的下載請求用戶實現(xiàn)MiddleWare中間件,負責對
Request對象和
Response對象進行處理可選組件ItemPipeline數(shù)據(jù)管道,負責對爬取到的數(shù)據(jù)進行處理可選組件表scrapy核心組件及其作用Scrapy架構(gòu)原理對于用戶來說,Spider是最核心的組件,Scrapy爬蟲開發(fā)是圍繞實現(xiàn)Spider展開的。Requests和Response是HTTP協(xié)議中HTTP請求和HTTP響應,在Scrapy框架中定義了相應的Request類和Response類。Items表示Spider從頁面中爬取的一項數(shù)據(jù)。Scrapy架構(gòu)原理Scrapy框架的組成結(jié)構(gòu),并從數(shù)據(jù)流的角度揭示Scrapy的工作原理。Scrapy簡介以及安裝各種對象在框架中的流動過程:當SPIDER要爬取某URL地址的頁面時,需使用該URL構(gòu)造一個Requests對象,提交給ENGINE。如上圖序號①所示。Requests對象隨后進入SCHEDULER調(diào)度器按某種算法進行排隊,之后的某個時刻SCHEDULER調(diào)度器將其出隊,送往DOWNLOADER下載器組件。如上圖序號②、③、④所示。DOWNLOADER下載器根據(jù)Requests對象中的URL地址發(fā)送一次HTTP請求到網(wǎng)站服務器,之后用服務器返回的HTTP響應構(gòu)造出一個Response對象,其中包含頁面的HTML文本。如上圖序號⑤所示。Response對象最終會被遞送給SPIDER的頁面解析函數(shù)(構(gòu)造Request對象時指定)進行處理,頁面解析函數(shù)從頁面中提取數(shù)據(jù),封裝成Items后提交給PIPELINES組件進行處理,最終可能由Exporter以某種數(shù)據(jù)格式寫入文件(CSV、json等);另一方面頁面解析函數(shù)還從頁面中提取鏈接url,構(gòu)造出新的Requests對象提交給Engine引擎。如上圖序號⑥、⑦、⑧所示。1Scrapy請求原理爬蟲框架-scrapy框架初探Scrapy架構(gòu)原理23
案例精講-貝殼新房Scrapy請求原理爬蟲文件中請求的發(fā)送沒有手動實現(xiàn),但是在parse函數(shù)中還是獲取到了響應數(shù)據(jù),這是因為爬蟲文件中的爬蟲類繼承到了Spider父類中的start_requests(self)這個方法,該方法就可以對start_urls列表中url發(fā)起請求。我們可以查看Scrapy源碼來進行驗證。在PyCharm中打開Spiders文件夾中的任意爬蟲文件,移動到類定義行,按住“CTRL”鍵,鼠標移動到括號中的scrapy.Spider,出現(xiàn)藍色提示,鼠標點擊,可以跳轉(zhuǎn)到Scrapy框架的源代碼中,查看定義。如圖所示。Spider源文件打開后,在58行可以看到以下源碼。Scrapy請求原理在底部可以看到for循環(huán)遍歷了start_urls列表,然后使用Request方法發(fā)送Get請求。那為什么Scrapy框架要將start_urls設計為列表類型?Scrapy框架是個異步高并發(fā)的框架,可以同時發(fā)送多個請求,并發(fā)請求的數(shù)量可以在Settings.py文件的CONCURRENT_REQUESTS參數(shù)進行配置,缺省情況下可開啟32個請求,具體開啟的請求數(shù)量和電腦硬件有關(guān)??梢允褂昧斜硗茖綖閰?shù)Start_urls賦值,讓可以實現(xiàn)簡單分頁功能了。如果有特殊要求(需要發(fā)送請求時攜帶cookies)可以通過重寫defstart_requests(self)來實現(xiàn)請求發(fā)送。Scrapy請求原理上頁Request方法只是指定了url地址、未將請求加入到去重隊列中(可以重復發(fā)送相同的請求)。其實Request方法有很多參數(shù)來應對各種復雜情況。Request方法的語法格式如下:class
scrapy.Request(url,[callback,method='GET',headers,body,cookies,meta,encoding='utf-8',priority=0,dont_filter=False,errback,flags])參數(shù)說明url:為請求發(fā)送的url地址,必選,其余參數(shù)都時可選。callback:回調(diào)函數(shù),用于接收請求后的返回信息,若沒指定,則默認為parse()函數(shù)method:http請求的方式GET、POST、PUT等,必須為大寫,默認為GET請求。headers:請求頭信息,一般在settings中設置即可。body:請求體,str類型,一般不需要設置Scrapy請求原理cookies:請求的cookie,dict或list類型,字典類型如cookies={'name1':'value1','name2':'value2'}列表類型如cookies=[{'name':'Zarten','value':'mynameisZarten']meta:元數(shù)據(jù),用于頁面之間傳遞數(shù)據(jù),字典類型,可使用response.meta接收數(shù)據(jù)。encoding:請求的編碼方式,默認為'utf-8'priority:指定請求的優(yōu)先級,int類型,數(shù)字越大優(yōu)先級越高,可以為負數(shù),默認為0dont_filter:強制不過濾。默認為False,若設置為True,這次請求將不會過濾(不會加入到去重隊列中),可以多次執(zhí)行相同的請求。errback:拋出錯誤的回調(diào)函數(shù),錯誤包括404,超時,DNS錯誤等scrapy.Request方法常用于分頁以及網(wǎng)站詳情頁爬取。常用參數(shù)有url、callback、method、cookies、meta。Scrapy請求原理案例1:以Scrapy官方推薦網(wǎng)站為例講解scrapy.Request的基本方法。網(wǎng)站quotes.toscrape的內(nèi)容為名人名言,任務是爬取網(wǎng)站的所有名人名言和作者。頁面如圖所示。Scrapy請求原理案例1:以Scrapy官方推薦網(wǎng)站為例講解scrapy.Request的基本方法。網(wǎng)站quotes.toscrape的內(nèi)容為名人名言,任務是爬取網(wǎng)站的所有名人名言和作者。1、每句名人名言包裹在class為quote的div中。根據(jù)class一次獲取所有的數(shù)據(jù)行,然后在逐行提取名人名言和作者信息。2、這個案例的難點在于分頁功能。頁腳部分有“Next”按鈕,點擊后瀏覽器的url地址發(fā)生變化,增加參數(shù)/page/頁碼。但是數(shù)據(jù)有多少頁不清楚,無法使用列表推導式為start_urls賦值,從而實現(xiàn)分頁。這種情況我們只能查看分頁按鈕的html結(jié)構(gòu)。從上圖發(fā)現(xiàn)“Next”按鈕下A標簽的href屬性就是分頁時需要傳遞的參數(shù)。不停點擊下一頁按鈕到最后一頁時,“Next”按鈕不再顯示。Scrapy請求原理案例1:網(wǎng)站quotes.toscrape的內(nèi)容為名人名言,任務是爬取網(wǎng)站的所有名人名言和作者?!緦崿F(xiàn)步驟】1、創(chuàng)建爬蟲項目scrapydemo
scrapystartprojectscrapydemo2、創(chuàng)建爬蟲文件
,爬蟲文件名quote,域名。3、創(chuàng)建數(shù)據(jù)容器,在spiders同級目錄中找到items.py文件Scrapy請求原理案例1:網(wǎng)站quotes.toscrape的內(nèi)容為名人名言,任務是爬取網(wǎng)站的所有名人名言和作者。【實現(xiàn)步驟】4、在spiders文件夾中找到quote.py爬蟲文件,編寫解析函數(shù)。Scrapy請求原理Scrapy除了可以發(fā)送get請求外,也可以發(fā)送post請求。Post請求的使用頻率并不高,典型應用為模擬登錄,有些網(wǎng)站對爬蟲不友好,必須用戶登錄后才能進行數(shù)據(jù)爬取。scrapy.FormRequest主要用于發(fā)送post請求?;菊Z法格式如下:
scrapy.FormRequest(url,method,formdata,callback)參數(shù)說明1、url:目標網(wǎng)站url地址,必輸項2、method:get或post請求,缺省為post請求3、formdata:post請求參數(shù),字典類型4、callback:回調(diào)函數(shù),用于接收請求后的返回信息,若沒指定,則默認為parse()函數(shù)Scrapy請求原理以網(wǎng)站的登錄為例來進行講解,登錄的url地址/login。只需要輸入用戶名和密碼即可實現(xiàn)登錄,此模擬網(wǎng)站登錄名和密碼可以任意輸入。結(jié)合瀏覽器開發(fā)者工具,攔截網(wǎng)站請求后發(fā)現(xiàn),點擊login按鈕post請求url地址和get請求獲取的頁面地址一致。如圖所示。Scrapy快速入門分析出目標地址和參數(shù)后,實現(xiàn)思路是使用FormRequest發(fā)送Post請求模擬登錄,請求發(fā)送完成后使用XPath表達式驗證頁面中是否出現(xiàn)logout鏈接,如果出現(xiàn)logout鏈接表示登錄成功。為了簡化流程,創(chuàng)建爬蟲項目以及生成爬蟲模板的步驟省略,我們可以直接拷貝任何一個spider模板文件,然后進行修改,文件名scrapyPost.py,最后使用runspider命令執(zhí)行即可。參考代碼如下:importscrapy
classLoginSpider(scrapy.Spider):
name='login'
allowed_domains=['']
start_urls=['/login']
#根據(jù)scrapy請求的基本原理,重寫start_requests請求發(fā)送
defstart_requests(self):
forurlinself.start_urls:
data={
"username":"123",#用戶名和密碼可以是任意字符
"password":"123"
}#發(fā)送post請求,formdata為提交的數(shù)據(jù),callback回調(diào)函數(shù)使用默認parse
yieldscrapy.FormRequest(url,formdata=data)
#登錄后,解析頁面是否出現(xiàn)logout鏈接
defparse(self,response):
print("start")#查找是否出現(xiàn)logout標簽文本
status=response.xpath("http://*[@class='col-md-4']//a/text()").get()
print(status)
1Scrapy請求原理爬蟲框架-scrapy框架初探Scrapy架構(gòu)原理23
案例精講-貝殼新房案例精講-貝殼新房【任務描述】貝殼新房案例要求爬取某個城市掛牌出售的全部樓盤信息。爬取信息包括樓盤名稱、地址、每平米均價、總房價。目標網(wǎng)站url地址為/loupan。案例精講-貝殼新房【任務描述】貝殼新房案例要求爬取某個城市掛牌出售的全部樓盤信息。爬取信息包括樓盤名稱、地址、每平米均價、總房價?!救蝿辗治觥?、使用瀏覽器開發(fā)者工具分析頁面HTML結(jié)構(gòu),頁面的HTML結(jié)構(gòu)看起稍顯復雜,但使用的標簽依然是ul和li。如圖所示。選擇使用XPath表達式結(jié)合二次查找法進行數(shù)據(jù)提取??梢源_定每行數(shù)據(jù)的XPath表達式為//ul[@class='resblock-list-wrapper']/li。案例精講-貝殼新房【任務描述】貝殼新房案例要求爬取某個城市掛牌出售的全部樓盤信息。爬取信息包括樓盤名稱、地址、每平米均價、總房價。【任務分析】2、除了頁面結(jié)構(gòu)外,分頁也是我們必須要考慮的問題。切換分頁按鈕觀察url地址的變化,可以找出分頁的規(guī)律為增加了pg參數(shù),格式為“/loupan/pg頁碼”。同時必須要關(guān)注第一頁的規(guī)則,驗證/loupan/pg1是否能夠正常顯示信息,通過驗證發(fā)現(xiàn)首頁適合此規(guī)律。如果不能正常顯示,首頁需要單獨處理。案例精講-貝殼新房【任務描述】貝殼新房案例要求爬取某個城市掛牌出售的全部樓盤信息。爬取信息包括樓盤名稱、地址、每平米均價、總房價?!救蝿諏崿F(xiàn)】入門案例中已經(jīng)講解了使用Scrapy框架編寫爬蟲的五個基本步驟,包括創(chuàng)建爬蟲項目、生成爬蟲模板、定義數(shù)據(jù)容器、編寫數(shù)據(jù)解析函數(shù)、運行爬蟲。1、創(chuàng)建爬蟲項目
首先,需要在當前目錄下創(chuàng)建Scrapy框架爬蟲項目,cmd命令行或Pycharm下terninal下輸入“scrapystartprojecthouse”。2、生成爬蟲模板文件
創(chuàng)建爬蟲項目后,生成爬蟲模板文件。使用cd命令進入項目目錄house,然后使用scrapygenspider生成爬蟲模板文件。其中參數(shù)shells為自定義的爬蟲名稱,為貝殼網(wǎng)站的重慶地區(qū)url地址。案例精講-貝殼新房【任務描述】貝殼新房案例要求爬取某個城市掛牌出售的全部樓盤信息。爬取信息包括樓盤名稱、地址、每平米均價、總房價?!救蝿諏崿F(xiàn)】入門案例中已經(jīng)講解了使用Scrapy框架編寫爬蟲的五個基本步驟,包括創(chuàng)建爬蟲項目、生成爬蟲模板、定義數(shù)據(jù)容器、編寫數(shù)據(jù)解析函數(shù)、運行爬蟲。3、定義數(shù)據(jù)容器
在編寫正式的爬蟲前需要先定義存儲數(shù)據(jù)的容器,用來約定數(shù)據(jù)的列名,類型為統(tǒng)一的Scrapy.Field()。在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中考道德與法治(福建)第三次模擬考試(含答案)
- 浙江中考科學試卷及答案
- 環(huán)衛(wèi)安全考題題庫及答案
- 遼寧干部在線試題及答案
- 科四考題奇葩題庫及答案
- 2025年職業(yè)技能教學題庫及答案
- 河南機電職測題庫及答案
- 比亞迪賣貨合同范本
- 會所店面轉(zhuǎn)讓合同范本
- 社區(qū)護理中風患者心理支持
- 判決分析報告
- 潔凈工作臺性能參數(shù)校準規(guī)范
- 如果歷史是一群喵16
- 華為HCIA存儲H13-611認證培訓考試題庫(匯總)
- 社會主義發(fā)展史知到章節(jié)答案智慧樹2023年齊魯師范學院
- 美國史智慧樹知到答案章節(jié)測試2023年東北師范大學
- GB/T 15924-2010錫礦石化學分析方法錫量測定
- GB/T 14525-2010波紋金屬軟管通用技術(shù)條件
- GB/T 11343-2008無損檢測接觸式超聲斜射檢測方法
- GB/T 1040.3-2006塑料拉伸性能的測定第3部分:薄膜和薄片的試驗條件
- 教師晉級專業(yè)知識和能力證明材料
評論
0/150
提交評論