![大數(shù)據(jù)采集與預(yù)處理課件:Scrapy各組件的用法 -1_第1頁](http://file4.renrendoc.com/view9/M00/02/20/wKhkGWcaYqKAdrKCAADvSG5wpIk048.jpg)
![大數(shù)據(jù)采集與預(yù)處理課件:Scrapy各組件的用法 -1_第2頁](http://file4.renrendoc.com/view9/M00/02/20/wKhkGWcaYqKAdrKCAADvSG5wpIk0482.jpg)
![大數(shù)據(jù)采集與預(yù)處理課件:Scrapy各組件的用法 -1_第3頁](http://file4.renrendoc.com/view9/M00/02/20/wKhkGWcaYqKAdrKCAADvSG5wpIk0483.jpg)
![大數(shù)據(jù)采集與預(yù)處理課件:Scrapy各組件的用法 -1_第4頁](http://file4.renrendoc.com/view9/M00/02/20/wKhkGWcaYqKAdrKCAADvSG5wpIk0484.jpg)
![大數(shù)據(jù)采集與預(yù)處理課件:Scrapy各組件的用法 -1_第5頁](http://file4.renrendoc.com/view9/M00/02/20/wKhkGWcaYqKAdrKCAADvSG5wpIk0485.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
使用Scrapy爬蟲框架采集數(shù)據(jù)——爬取汽車之家數(shù)據(jù) 本章學(xué)習(xí)目標(biāo)了解Scrapy爬蟲框架的工作原理了解Scrapy爬蟲框架的安裝過程以及各組件的基本含義和用法掌握Scrapy爬蟲框架采集數(shù)據(jù)的實(shí)例6.3.1Selector
在抓取web頁面時(shí),需要執(zhí)行的最常見任務(wù)是從HTML源提取數(shù)據(jù)。有幾個(gè)庫可以實(shí)現(xiàn)這一點(diǎn)。BeautifulSoup是Python程序員中非常流行的web抓取庫,它根據(jù)HTML代碼的結(jié)構(gòu)構(gòu)造Python對象,并合理地處理不好的標(biāo)記,但它有一個(gè)缺點(diǎn):速度慢。lxml是一個(gè)基于ElementTree的pythonAPI的XML解析庫(它也解析HTML)。(lxml不是Python標(biāo)準(zhǔn)庫的一部分。)Scrapy有自己的數(shù)據(jù)提取機(jī)制。它們之所以稱為選擇器,是因?yàn)樗鼈儭斑x擇”由XPath或CSS表達(dá)式指定的HTML文檔的某些部分。6.3Scrapy各組件的用法XPath是一種用于在XML文檔中選擇節(jié)點(diǎn)的語言,也可以與HTML一起使用。CSS是一種用于向HTML文檔應(yīng)用樣式的語言。它定義了選擇器來將這些樣式與特定的HTML元素關(guān)聯(lián)起來。Scrapy選擇器是在lxml庫之上構(gòu)建的,這意味著它們在速度和解析精度方面非常相似。Scrapy選擇器是通過傳遞文本或文本響應(yīng)對象構(gòu)造的Selector類的實(shí)例。它根據(jù)輸入類型自動(dòng)選擇最佳解析規(guī)則(XML或HTML),以下幾種構(gòu)建選擇器selector的方式。>>>fromscrapy.selectorimportSelector>>>fromscrapy.httpimportHtmlResponse從文本構(gòu)建實(shí)例:>>>body='<html><body><span>good</span></body></html>'>>>Selector(text=body).xpath('//span/text()').extract()[u'good']從響應(yīng)構(gòu)建實(shí)例:>>>response=HtmlResponse(url='http://example',body=body)>>>Selector(response=response).xpath('//span/text()').extract()[u'good']了方便起見,響應(yīng)對象含有一個(gè)selector屬性,完全可以使用這個(gè)快捷方式:>>>response.selector.xpath('//span/text()').extract()[u'good']實(shí)例【6-1】將使用一個(gè)HTML代碼作為案例,進(jìn)一步地介紹如何使用selector選擇器。這里將是Scrapy的shell程序進(jìn)行交互和測試。<html><head><basehref='http://example/'/><title>Examplewebsite</title></head><body><divid='images'><ahref='image1.html'>Name:Myimage1<br/><imgsrc='image1_thumb.jpg'/></a><ahref='image2.html'>Name:Myimage2<br/><imgsrc='image2_thumb.jpg'/></a><ahref='image3.html'>Name:Myimage3<br/><imgsrc='image3_thumb.jpg'/></a><ahref='image4.html'>Name:Myimage4<br/><imgsrc='image4_thumb.jpg'/></a><ahref='image5.html'>Name:Myimage5<br/><imgsrc='image5_thumb.jpg'/></a></div></body></html>1)首先是打開Scrapy的shell程序:scrapyshellurl(這里的url是指要使用的url)2)然后在shell加載之后,您將擁有響應(yīng)response作為變量可用,以及響應(yīng)中附加的選擇器屬性response.selector。由于這里處理的是HTML,選擇器將自動(dòng)使用HTML解析器。因此,通過查看頁面的HTML代碼,可以構(gòu)造一個(gè)XPath來選擇標(biāo)題標(biāo)記中的文本。>>>response.selector.xpath('//title/text()’)[<Selector(text)xpath=//title/text()>]3)使用XPath和CSS查詢響應(yīng)非常常見,響應(yīng)包括兩個(gè)方便的快捷方式:response.xpath()和response.css()。>>>response.xpath('//title/text()')[<Selector(text)xpath=//title/text()>]>>>response.css('title::text')[<Selector(text)xpath=//title/text()>]如您所見,.xpath()和.css()方法返回一個(gè)SelectorList實(shí)例,這是一個(gè)新的選擇器列表。該API可用于快速選擇嵌套數(shù)據(jù)。>>>response.css('img').xpath('@src').extract()[u'image1_thumb.jpg',u'image2_thumb.jpg',u'image3_thumb.jpg',u'image4_thumb.jpg',u'image5_thumb.jpg']要實(shí)際提取文本數(shù)據(jù),必須調(diào)用selector.extract()方法,如下所示。>>>response.xpath('//title/text()').extract()[u'Examplewebsite']如果只想提取第一個(gè)匹配的元素,可以調(diào)用選擇器.extract_first()。>>>response.xpath('//div[@id="images"]/a/text()').extract_first()u'Name:Myimage1'如果沒有找到元素,則返回None。>>>response.xpath('//div[@id="not-exists"]/text()').extract_first()isNoneTrue可以提供一個(gè)默認(rèn)返回值作為參數(shù)。>>>response.xpath('//div[@id="not-exists"]/text()').extract_first(default='not-found')'not-found'CSS選擇器可以使用CSS3偽元素選擇文本或?qū)傩怨?jié)點(diǎn)。>>>response.css('title::text').extract()[u'Examplewebsite']選擇方法(.xpath()或.css())返回相同類型的選擇器列表,因此您也可以調(diào)用這些選擇器的選擇方法。這里有一個(gè)例子。>>>links=response.xpath('//a[contains(@href,"image")]')>>>links.extract()[u'<ahref="image1.html">Name:Myimage1<br><imgsrc="image1_thumb.jpg"></a>',u'<ahref="image2.html">Name:Myimage2<br><imgsrc="image2_thumb.jpg"></a>',u'<ahref="image3.html">Name:Myimage3<br><imgsrc="image3_thumb.jpg"></a>',u'<ahref="image4.html">Name:Myimage4<br><imgsrc="image4_thumb.jpg"></a>',u'<ahref="image5.html">Name:Myimage5<br><imgsrc="image5_thumb.jpg"></a>']>>>forindex,linkinenumerate(links):...args=(index,link.xpath('@href').extract(),link.xpath('img/@src').extract())...print'Linknumber%dpointstourl%sandimage%s'%argsLinknumber0pointstourl[u'image1.html']andimage[u'image1_thumb.jpg']Linknumber1pointstourl[u'image2.html']andimage[u'image2_thumb.jpg']Linknumber2pointstourl[u'image3.html']andimage[u'image3_thumb.jpg']Linknumber3pointstourl[u'image4.html']andimage[u'image4_thumb.jpg']Linknumber4pointstourl[u'image5.html']andimage[u'image5_thumb.jpg']選擇器selector有一個(gè).re()方法用來使用正則表達(dá)式獲取數(shù)據(jù),該方法返回一個(gè)unicode字符串的列表。>>>response.xpath('//a[contains(@href,"image")]/text()').re(r'Name:\s*(.*)') [u'Myimage1',u'Myimage2',u'Myimage3',u'Myimage4',u'Myimage5']6.3.2Spider Spider類是定義如何對某個(gè)站點(diǎn)(或一組站點(diǎn))進(jìn)行抓取的類,包括如何執(zhí)行抓取(即跟蹤鏈接)以及如何從其頁面中提取結(jié)構(gòu)化數(shù)據(jù)(即抓取項(xiàng))。換句話說,spider是為爬取和解析頁面特定站點(diǎn)(或者在某些情況下是一組站點(diǎn))的自定義行為的地方。對于Spider來說,一個(gè)抓取周期的具體過程如下。首先生成初始請求來抓取第一個(gè)url,然后指定一個(gè)回調(diào)函數(shù),使用從這些請求下載的響應(yīng)來調(diào)用該回調(diào)函數(shù)。要執(zhí)行的第一個(gè)請求是通過調(diào)用start_requests()方法獲得的,該方法(默認(rèn)設(shè)置)為start_urls中指定的url生成請求,并將解析方法作為請求的回調(diào)函數(shù)。在回調(diào)函數(shù)中,解析響應(yīng)(web頁面)并返回帶有提取的數(shù)據(jù)、Item對象、請求對象的dicts或可迭代的對象。這些請求還將包含一個(gè)回調(diào)(可能是相同的),然后由Scrapy下載,之后由指定的回調(diào)函數(shù)處理它們的響應(yīng)。在回調(diào)函數(shù)中,您解析頁面內(nèi)容,通常使用選擇器Selectors(但是您也可以使用BeautifulSoup、lxml或您喜歡的任何機(jī)制)并使用解析后的數(shù)據(jù)生成項(xiàng)目Items。最后從爬蟲返回的item通常會(huì)持久化到數(shù)據(jù)庫(在某個(gè)項(xiàng)管道中ItemPipeline),或者使用Feedexports將其寫入文件。這是一個(gè)最簡單的Spider周期,也是所有其他Spider都必須繼承的Spider(包括與Scrapy捆綁在一起的Spider,以及你自己編寫的Spider)。它不提供任何特殊功能。它只是提供了一個(gè)默認(rèn)的start_requests()實(shí)現(xiàn),該實(shí)現(xiàn)從start_urlsspider屬性發(fā)送請求,并為每個(gè)結(jié)果響應(yīng)調(diào)用爬行器的方法解析。Spider中包含一些重要的屬性如下。1.name定義此爬蟲名稱的字符串。爬蟲名稱是Scrapy定位(和實(shí)例化)爬蟲的方式,因此它必須是惟一的。這是最重要的Spider屬性,也是必需的。2.allowed_domains一個(gè)可選的字符串列表,其中包含允許爬蟲爬取的域。如果啟用OffsiteMiddleware,那么對不屬于此列表中指定的域名(或其子域名)的url的請求將不會(huì)被跟蹤。3.start_urls當(dāng)指定非特定url時(shí),爬蟲將從其中開始爬取的url列表。因此,下載的第一個(gè)頁面將在這里列出。后續(xù)請求將從開始的url中獲得連續(xù)的生成數(shù)據(jù)。4.custom_settings運(yùn)行此爬蟲時(shí)將從項(xiàng)目wideconfiguration中重寫的設(shè)置字典。它必須定義為classattribute,因?yàn)樵趯?shí)例化之前會(huì)更新設(shè)置。在運(yùn)行Spider的時(shí)候,一個(gè)字典類型的設(shè)置將被從整個(gè)項(xiàng)目的配置范圍內(nèi)重寫。它必須被定義為一個(gè)類屬性,因?yàn)樵趯?shí)例化之前會(huì)更新設(shè)置。5.crawler這個(gè)屬性是在初始化類之后由from_crawler()類方法設(shè)置的,并鏈接到這個(gè)爬蟲實(shí)例綁定到的crawler對象。6.settings運(yùn)行此爬蟲的配置。這是一個(gè)實(shí)例。7.logger用爬蟲的名稱創(chuàng)建的Python日志記錄器。您可以使用它發(fā)送日志消息。8.from_crawler(crawler,*args,**kwargs)這是Scrapy用來創(chuàng)建爬蟲的類方法。您可能不需要直接重寫它,因?yàn)樗J(rèn)作為__init__()方法的代理,通過使用給定參數(shù)args和命名參數(shù)kwargs調(diào)用它。盡管如此,該方法在新實(shí)例中設(shè)置spider和settings屬性,以便稍后可以在spider的代碼中訪問它們。9.start_requests()實(shí)例【6-2】這個(gè)方法必須返回一個(gè)可迭代的,并帶有第一個(gè)請求來爬取的爬蟲。當(dāng)spider被打開時(shí),它被稱為Scrapy。Scrapy只調(diào)用它一次,所以將start_requests()實(shí)現(xiàn)為生成器是安全的。classMySpider(scrapy.Spider):name='myspider'defstart_requests(self):return[scrapy.FormRequest("http://www.example/login",formdata={'user':'john','pass':'secret'},callback=self.logged_in)]deflogged_in(self,response):#在這里,您將提取鏈接以跟蹤它們,并使用另一個(gè)回調(diào)返回每個(gè)鏈接的請求
pass10.parse(response)
當(dāng)請求沒有指定的回調(diào)函數(shù)時(shí),這是Scrapy用來處理下載后的響應(yīng)數(shù)據(jù)的默認(rèn)回調(diào)函數(shù)。解析方法負(fù)責(zé)處理響應(yīng),并返回收集的數(shù)據(jù)或更多url。其他請求回調(diào)具有與Spider類相同的要求。此方法以及任何其他請求回調(diào)函數(shù)都必須返回可迭代的請求,dicts或Item對象。11.closed(reason)當(dāng)spider關(guān)閉時(shí)。這個(gè)方法為spider_closed信號提供了一個(gè)快捷方式。實(shí)例【6-3】下面的實(shí)例是從一個(gè)回調(diào)中返回多個(gè)請求和項(xiàng)目。importscrapyclassMySpider(scrapy.Spider):name='example'allowed_domains=['example']
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 滬科版數(shù)學(xué)八年級上冊《求一次函數(shù)的表達(dá)式》聽評課記錄
- 2024-2025學(xué)年八年級物理上冊第4章聲現(xiàn)象單元雙基雙測A卷基礎(chǔ)篇含解析北師大版
- 2024-2025學(xué)年五年級語文上冊第二單元6變色龍教案設(shè)計(jì)蘇教版
- 數(shù)學(xué)連環(huán)畫 畫出你的數(shù)學(xué)故事(說課稿)-2024-2025學(xué)年一年級數(shù)學(xué)下冊蘇教版
- 車輛租賃協(xié)議范本
- 會(huì)議服務(wù)協(xié)議書范本
- 滄州房屋出租協(xié)議書范本
- 超市入駐合作經(jīng)營合同范本
- 合作成立洗滌租賃公司合同范本
- 教培機(jī)構(gòu)書店合作協(xié)議書范本
- 分管安全副校長在教師會(huì)議上講話:到底如何抓好安全從哪些細(xì)節(jié)來抓安全
- 湘教版七年級上冊數(shù)學(xué)期末考試試卷帶答案
- 中國游戲發(fā)展史課件
- 校園安全視頻監(jiān)控維保方案
- 政府購買報(bào)刊訂閱服務(wù)協(xié)議
- 第三單元名著導(dǎo)讀《駱駝祥子》整本書閱讀教學(xué)設(shè)計(jì)+2023-2024學(xué)年統(tǒng)編版語文七年級下冊
- 工程數(shù)學(xué)試卷及答案
- DB11T 211-2017 園林綠化用植物材料 木本苗
- 《PLC應(yīng)用技術(shù)(西門子S7-1200)第二版》全套教學(xué)課件
- 第01講 直線的方程(九大題型)(練習(xí))
- 2024上海申康醫(yī)院發(fā)展中心招聘2人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
評論
0/150
提交評論