人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元五 Scrapy網(wǎng)頁數(shù)據(jù)采集_第1頁
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元五 Scrapy網(wǎng)頁數(shù)據(jù)采集_第2頁
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元五 Scrapy網(wǎng)頁數(shù)據(jù)采集_第3頁
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元五 Scrapy網(wǎng)頁數(shù)據(jù)采集_第4頁
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元五 Scrapy網(wǎng)頁數(shù)據(jù)采集_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

任務(wù)1項(xiàng)目創(chuàng)建

任務(wù)2字段定義及參數(shù)設(shè)置

任務(wù)3文本解析

任務(wù)4內(nèi)容存儲任務(wù)1項(xiàng)目創(chuàng)建Scrapy是Python的第三方應(yīng)用程序框架,主要用于實(shí)現(xiàn)網(wǎng)頁數(shù)據(jù)的采集和存儲。本任務(wù)將實(shí)現(xiàn)Scrapy項(xiàng)目的創(chuàng)建,主要內(nèi)容如下:(1)創(chuàng)建項(xiàng)目;

(2)創(chuàng)建爬蟲文件。一、Scrapy簡介Scrapy是一個基于Python開發(fā)的第三方應(yīng)用程序框架,能夠?qū)崿F(xiàn)快速、高層次的屏幕抓取和Web抓取,主要用于爬取網(wǎng)站并從頁面中提取結(jié)構(gòu)性數(shù)據(jù)。還可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試等方面。且使用非常簡單,需定制開發(fā)幾個模塊即可輕松地實(shí)現(xiàn)一個爬蟲,能夠方便地抓取網(wǎng)頁內(nèi)容。Scrapy使用Twisted異步網(wǎng)絡(luò)框架進(jìn)行網(wǎng)絡(luò)通信的處理,且架構(gòu)清晰,在加快下載速度的同時,不僅不需要自定義異步框架,還可以通過其包含的各種中間件接口,靈活地完成數(shù)據(jù)采集的各種需求。Scrapy整體架構(gòu)如圖5-1所示?!救蝿?wù)描述】【知識準(zhǔn)備】由圖5-1可知,一個簡單的Scrapy架構(gòu)主要由ScrapyEngine(引擎)、Scheduler(調(diào)度器)、Downloader(下載器)、Spiders(爬蟲)、ItemPipeline(管道)、DownloaderMiddlewares(下載中間件)和SpiderMiddlewares(Spider中間件)等七個部分組成。各個部分的作用如表5-1所示。Scrapy框架將網(wǎng)頁采集功能集成到了各個模塊中,只留出自定義部分,將程序員從煩冗的流程式重復(fù)工作中解放出來。Scrapy具有如下優(yōu)勢:(1)異步通信,能夠靈活調(diào)節(jié)并發(fā)量。

(2)使用XPath代替正則表達(dá)式,可讀性強(qiáng),速度快。(3)能夠同時爬取不同url包含的數(shù)據(jù)。(4)支持Shell方式,方便獨(dú)立調(diào)試。(5)采用管道方式處理數(shù)據(jù),靈活性強(qiáng),可保存為多種形式。Scrapy在大規(guī)模爬取和高效穩(wěn)定爬取等方面具有很大的優(yōu)勢,但在資源利用率、可用性等方面存在著不足。Scrapy的缺點(diǎn)如下:(1)無法完成分布式爬取。

(2)內(nèi)存消耗大,且不能持久。(3)不能獲取Ajax包含的數(shù)據(jù)。

(4)能夠下載圖片與視頻,但可用性較差。(5)異步框架出錯后其他任務(wù)不會停止,并且數(shù)據(jù)出錯后難以察覺。二、Scrapy安裝Scrapy是Python的第三方框架,可以使用pip安裝、wheel安裝和源碼安裝等安裝方式。在安裝Scrapy之前,需要事先安裝lxml、pyOpenSSL、Twisted、PyWin32等相關(guān)的依賴庫。Scrapy框架的安裝步驟如下所示。第一步:安裝lxml解析庫。在命令窗口輸入“pipinstalllxml”命令即可進(jìn)行下載安裝,如圖5-2所示。第二步:安裝pyOpenSSL。在命令窗口輸入“pipinstallpyOpenSSL”,結(jié)果如圖5-3所示。第三步:安裝Twisted。在命令窗口輸入“pipinstallTwisted”進(jìn)行下載安裝,結(jié)果如圖5-4所示。第四步:安裝PyWin32。在命令窗口輸入“pipinstallPyWin32”,結(jié)果如圖5-5所示。第五步:安裝Scrapy框架。在命令窗口輸入“pipinstallScrapy”,結(jié)果如圖5-6所示。第六步:進(jìn)入Python交互式命令行,使用import引入Scrapy對安裝結(jié)果進(jìn)行驗(yàn)證,結(jié)果如圖5-7所示。三、Scrapy操作指令Scrapy操作命令主要用于實(shí)現(xiàn)項(xiàng)目創(chuàng)建、項(xiàng)目運(yùn)行等操作,可以分為全局命令和項(xiàng)目命令。其中,全局命令在整個操作系統(tǒng)使用;項(xiàng)目命令只能在Scrapy項(xiàng)目內(nèi)部使用。常用的Scrapy操作命令如表5-2所示。1.?shell在Scrapy中,在未啟動spider的情況下,shell命令能夠啟動一個shell交互窗口,嘗試或調(diào)試爬取代碼。在使用時,shell命令會接收一個網(wǎng)頁地址。語法格式如下所示。scrapyshellurlshell命令使用后,會獲取整個地址的相關(guān)信息并將其以Response對象返回,之后可通過Response對象的相關(guān)方法或?qū)傩詫?shù)據(jù)進(jìn)行獲取,如獲取頭部信息、獲取標(biāo)簽包含內(nèi)容等。Response對象的常用方法如表5-3所示。語法格式如下所示。response.bodyresponse.headersresponse.xpath()response.css()2.?startprojectstartproject命令是一個創(chuàng)建命令,主要用于實(shí)現(xiàn)Scrapy項(xiàng)目的創(chuàng)建,通過在命令后面加入項(xiàng)目的名稱即可創(chuàng)建項(xiàng)目。語法格式如下所示。scrapystartprojectProjectName下面使用startproject命令創(chuàng)建一個名為ScrapyProject的Scrapy項(xiàng)目,代碼如下所示。scrapystartprojectScrapyProject結(jié)果如圖5-10所示。Scrapy項(xiàng)目的目錄結(jié)構(gòu)非常簡單,按照功能可以分為三個部分,分別是項(xiàng)目配置文件、項(xiàng)目設(shè)置文件、爬蟲代碼編寫文件。Scrapy項(xiàng)目結(jié)構(gòu)如圖5-11所示。Scrapy項(xiàng)目中各個文件的作用如表5-4所示。3.?genspidergenspider命令主要用于爬蟲文件的創(chuàng)建。在使用時,會接收被爬取網(wǎng)站的地址,并在spiders目錄中創(chuàng)建一個指定名稱的爬蟲文件,代碼如下所示。scrapygenspiderSpiderNameurl其中,url為可選參數(shù),不使用時,可以手動在爬蟲文件中進(jìn)行添加。另外,genspider命令可以提供多個設(shè)置模板的參數(shù),當(dāng)不指定模板時,默認(rèn)使用basic模板。常用參數(shù)如表5-5所示。4.?crawlcrawl命令主要用于實(shí)現(xiàn)Scrapy項(xiàng)目的運(yùn)行,在命令后面加入爬蟲文件名稱即可運(yùn)行Scrapy項(xiàng)目,代碼如下所示。scrapycrawlSpiderName另外,crawl命令在使用時,還可以使用“-o”參數(shù)指定導(dǎo)出的文件名稱即可將數(shù)據(jù)保存到指定的文件中,包括JSON、CSV、XML等文件格式,代碼如下所示。scrapycrawlSpiderName-ofilepath使用crawl命令保存數(shù)據(jù)時,保存的數(shù)據(jù)來自“items.py”文件中定義的各個字段,因此,需要在數(shù)據(jù)爬取成功后給定義的各個字段賦值。5.?listlist命令主要用于查看當(dāng)前spiders目錄中包含的爬蟲文件,并將爬蟲文件的名稱返回。代碼如下所示。scrapylist任務(wù)2字段定義及參數(shù)設(shè)置在Scrapy項(xiàng)目創(chuàng)建完成后,需要明確爬取目標(biāo)并設(shè)置項(xiàng)目參數(shù)和自定義字段。本任務(wù)主要介紹字段定義、項(xiàng)目設(shè)置和通用參數(shù)選擇,主要內(nèi)容如下:(1)字段定義;(2)項(xiàng)目設(shè)置;(3)選取通用參數(shù)。創(chuàng)建一個簡單的Scrapy爬蟲只需要五個步驟,分別是項(xiàng)目創(chuàng)建、爬蟲文件創(chuàng)建、明確字段、爬蟲制作、數(shù)據(jù)存儲。其中:(1)項(xiàng)目創(chuàng)建:通過startproject命令創(chuàng)建爬蟲項(xiàng)目。(2)爬蟲文件創(chuàng)建:通過genspider命令在spiders目錄中創(chuàng)建爬蟲文件。(3)明確字段:編寫items.py,明確抓取的目標(biāo)字段。(4)制作爬蟲:在爬蟲文件中編寫代碼開始爬取網(wǎng)頁,解析網(wǎng)頁內(nèi)容。(5)存儲內(nèi)容:設(shè)計管道(修改pipelines.py代碼)存儲爬取內(nèi)容?!救蝿?wù)描述】【知識準(zhǔn)備】一、字段定義在Scrapy中,字段的定義通過編寫items.py文件實(shí)現(xiàn),用于保存爬取數(shù)據(jù)。目前,字段的定義有兩種方式,都是通過自定義類實(shí)現(xiàn)的,只是類中包含的參數(shù)以及類屬性的定義存在不同。第一種方式包含參數(shù)為“scrapy.Item”,類屬性通過“scrapy.Field()”實(shí)現(xiàn),在Field()方法中,可以通過serializer參數(shù)指定序列化函數(shù),代碼如下所示。importscrapy#定義包含scrapy.Item參數(shù)的類classscrapyItem(scrapy.Item):#自定義字段name=scrapy.Field()age=scrapy.Field()第二種方式包含參數(shù)為“Item”,類屬性通過Field()方法實(shí)現(xiàn),但需要通過import導(dǎo)入Item和Field,與第一種方式相比,代碼更為精簡,代碼如下所示。#導(dǎo)入scrapy模塊importscrapy#導(dǎo)入scrapy的Item參數(shù)和Field方法fromscrapyimportItem,Field#定義包含Item參數(shù)的類classscrapyItem(Item):#自定義字段name=Field()age=Field()字段定義完成后,在爬蟲文件中需要引入該類并實(shí)例化,再通過實(shí)例化后對象加入中括號“[]”和定義的字段名稱實(shí)現(xiàn)數(shù)據(jù)的賦值,代碼如下所示。importscrapy#導(dǎo)入ScrapyprojectItem類fromScrapyProject.itemsimportScrapyprojectItemclassMyspiderSpider(scrapy.Spider):defparse(self,response):passitem=ScrapyprojectItem()item["name"]="值"item["public_date"]="值1"item["link"]="值2"二、項(xiàng)目設(shè)置在Scrapy中,項(xiàng)目的設(shè)置通過修改settings.py文件實(shí)現(xiàn),只需指定屬性及其對應(yīng)的屬性值即可,如項(xiàng)目名稱、并發(fā)請求、爬取策略、項(xiàng)目管道等設(shè)置。Scrapy框架中常用的項(xiàng)目設(shè)置參數(shù)如表5-6所示。三、通用參數(shù)使用genspider命令在spiders文件下創(chuàng)建一個爬蟲文件,該文件就包含了內(nèi)置代碼,如下所示。importscrappyclassMyspiderSpider(scrapy.Spider):name='MySpider'allowed_domains=['']start_urls=['/']defparse(self,response):pass其中,類中包含的scrapy.Spider參數(shù)是Scrapy的通用spider。在爬取頁面時,會通過start_urls指定地址獲取頁面內(nèi)容并以Response對象返回,再調(diào)用parse(self,response)方法對Response對象進(jìn)行處理。scrapy.Spider參數(shù)對應(yīng)的類屬性和可重寫方法如表5-7所示。在Scrapy中,除了通用的scrapy.Spider參數(shù)外,還提供多個具有特殊功能的參數(shù),如XML解析。常用參數(shù)如表5-8所示。1.?CrawlSpiderCrawlSpider參數(shù)允許指定爬取規(guī)則(Rule數(shù)據(jù)結(jié)構(gòu))實(shí)現(xiàn)頁面內(nèi)容的提取,這個Rule中包含提取和跟進(jìn)頁面的配置,Spider會根據(jù)Rule進(jìn)行操作,能夠滿足大多數(shù)的爬取需求。CrawlSpider除了繼承scrapy.Spider的方法和屬性,還提供了多個類屬性和可重寫方法,如表5-9所示。rules是爬取規(guī)則屬性,包含一個或多個Rule

對象的列表,多個Rule

對象通過逗號“,”連接,每個Rule定義爬取網(wǎng)站的規(guī)則,CrawlSpider會讀取rules的每一個Rule并進(jìn)行解析。Rule

方法代碼如下所示。fromscrapy.spidersimportCrawlSpider,Rulerules=(Rule(link_extractor,callback=None,cb_kwargs=None,follow=None,process_links=None,process_request=None))參數(shù)說明如表5-10所示。其中,link_extractor通過LinkExtractor()方法實(shí)現(xiàn),提取Response中符合規(guī)則的鏈接,代碼如下所示。#從scrapy.linkextractors中導(dǎo)入LinkExtractorfromscrapy.linkextractorsimportLinkExtractorLinkExtractor(allow=(),deny=(),restrict_xpaths=(),restrict_css=(),deny_domains=())參數(shù)說明如表5-11所示。2.?XMLFeedSpider與CrawlSpider相比,XMLFeedSpider針對的是XML,通過迭代器進(jìn)行各個節(jié)點(diǎn)的迭代來實(shí)現(xiàn)XML文件的解析,且繼承scrapy.Spider的屬性。XMLFeedSpider包含的常用類屬性和可重寫方法,如表5-12所示。為了與CrawlSpider的爬蟲文件區(qū)分,使用genspider命令創(chuàng)建一個新的爬蟲文件XMLSpider,再通過XMLFeedSpider進(jìn)行頁面爬取,代碼如下所示。結(jié)果如圖5-17所示。任務(wù)3文本解析爬取網(wǎng)頁后,Scrapy會將數(shù)據(jù)以Response對象的形式返回。本任務(wù)將使用選擇器實(shí)現(xiàn)Response對象的解析,主要內(nèi)容如下:(1)頁面解析;(2)提取數(shù)據(jù);(3)多頁提取。Scrapy提供了兩種用于解析文本的選擇器,即XPath選擇器和CSS選擇器,能夠通過特定的XPath或CSS表達(dá)式實(shí)現(xiàn)文本解析?!救蝿?wù)描述】【知識準(zhǔn)備】選擇的通用參數(shù)不同,選擇器的使用略有不同,在scrapy.Spider參數(shù)中,需要導(dǎo)入Selector解析Response對象后使用選擇器方法,代碼如下所示。在CrawlSpider和XMLFeedSpider中,直接使用選擇器方法即可,代碼如下所示。一、XPath選擇器與lxml庫的etree模塊下的XPath相比,Scrapy中的XPath選擇器同樣通過xpath()方法實(shí)現(xiàn),但Scrapy中的XPath選擇器將獲取結(jié)果以Selector格式返回,且同樣接收由符號和方法組成的路徑表達(dá)式進(jìn)行節(jié)點(diǎn)或節(jié)點(diǎn)集的選取。一些常用的路徑表達(dá)式示例如表5-13所示。通過text()方法獲取的文本存在于Selector中,需要通過Scrapy提供的相關(guān)方法從Selector中提取到節(jié)點(diǎn)的信息。目前,Scrapy提供了四種提取信息的方法,如表5-14所示。其中,extract_first()或get()方法總是返回一個結(jié)果,不管有多少匹配項(xiàng),都返回第一個匹配項(xiàng)的內(nèi)容;如果沒有匹配項(xiàng),則返回None。而extract()或getall()則會以列表的形式返回所有結(jié)果。二、CSS選擇器與XPath選擇器相比,CSS選擇器主要通過節(jié)點(diǎn)包含屬性以及節(jié)點(diǎn)之間的關(guān)系定位信息并提取數(shù)據(jù)。CSS選擇器通過css()方法實(shí)現(xiàn),獲取結(jié)果為Selector格式,且接受表達(dá)式作為參數(shù)。常用符號和方法如表5-15所示。CSS選擇器獲取結(jié)果同樣為Selector格式,且需要使用信息提取方法獲取Selector包含數(shù)據(jù),包含方法與XPath選擇器相同。任務(wù)4內(nèi)容存儲數(shù)據(jù)獲取完成后,可以將其保存到本地文件或數(shù)據(jù)庫中。本任務(wù)將提取后的數(shù)據(jù)通過Scrapy管道保存到MySQL數(shù)據(jù)庫中,主要內(nèi)容如下所示:(1)創(chuàng)建數(shù)據(jù)表;(2)修改配置文件;(3)存儲數(shù)據(jù);(4)數(shù)據(jù)查看。在Scrapy框架中,除使用rawl命令的“-o”參數(shù)將數(shù)據(jù)保存到本地JSON、CSV等文件中,還可以通過管道實(shí)現(xiàn)數(shù)據(jù)的存儲,且不僅可以將數(shù)據(jù)存儲到本地文件中,還可以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論