版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
任務(wù)1項(xiàng)目創(chuàng)建
任務(wù)2字段定義及參數(shù)設(shè)置
任務(wù)3文本解析
任務(wù)4內(nèi)容存儲(chǔ)任務(wù)1項(xiàng)目創(chuàng)建Scrapy是Python的第三方應(yīng)用程序框架,主要用于實(shí)現(xiàn)網(wǎng)頁(yè)數(shù)據(jù)的采集和存儲(chǔ)。本任務(wù)將實(shí)現(xiàn)Scrapy項(xiàng)目的創(chuàng)建,主要內(nèi)容如下:(1)創(chuàng)建項(xiàng)目;
(2)創(chuàng)建爬蟲文件。一、Scrapy簡(jiǎn)介Scrapy是一個(gè)基于Python開(kāi)發(fā)的第三方應(yīng)用程序框架,能夠?qū)崿F(xiàn)快速、高層次的屏幕抓取和Web抓取,主要用于爬取網(wǎng)站并從頁(yè)面中提取結(jié)構(gòu)性數(shù)據(jù)。還可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試等方面。且使用非常簡(jiǎn)單,需定制開(kāi)發(fā)幾個(gè)模塊即可輕松地實(shí)現(xiàn)一個(gè)爬蟲,能夠方便地抓取網(wǎng)頁(yè)內(nèi)容。Scrapy使用Twisted異步網(wǎng)絡(luò)框架進(jìn)行網(wǎng)絡(luò)通信的處理,且架構(gòu)清晰,在加快下載速度的同時(shí),不僅不需要自定義異步框架,還可以通過(guò)其包含的各種中間件接口,靈活地完成數(shù)據(jù)采集的各種需求。Scrapy整體架構(gòu)如圖5-1所示。【任務(wù)描述】【知識(shí)準(zhǔn)備】由圖5-1可知,一個(gè)簡(jiǎn)單的Scrapy架構(gòu)主要由ScrapyEngine(引擎)、Scheduler(調(diào)度器)、Downloader(下載器)、Spiders(爬蟲)、ItemPipeline(管道)、DownloaderMiddlewares(下載中間件)和SpiderMiddlewares(Spider中間件)等七個(gè)部分組成。各個(gè)部分的作用如表5-1所示。Scrapy框架將網(wǎng)頁(yè)采集功能集成到了各個(gè)模塊中,只留出自定義部分,將程序員從煩冗的流程式重復(fù)工作中解放出來(lái)。Scrapy具有如下優(yōu)勢(shì):(1)異步通信,能夠靈活調(diào)節(jié)并發(fā)量。
(2)使用XPath代替正則表達(dá)式,可讀性強(qiáng),速度快。(3)能夠同時(shí)爬取不同url包含的數(shù)據(jù)。(4)支持Shell方式,方便獨(dú)立調(diào)試。(5)采用管道方式處理數(shù)據(jù),靈活性強(qiáng),可保存為多種形式。Scrapy在大規(guī)模爬取和高效穩(wěn)定爬取等方面具有很大的優(yōu)勢(shì),但在資源利用率、可用性等方面存在著不足。Scrapy的缺點(diǎn)如下:(1)無(wú)法完成分布式爬取。
(2)內(nèi)存消耗大,且不能持久。(3)不能獲取Ajax包含的數(shù)據(jù)。
(4)能夠下載圖片與視頻,但可用性較差。(5)異步框架出錯(cuò)后其他任務(wù)不會(huì)停止,并且數(shù)據(jù)出錯(cuò)后難以察覺(jué)。二、Scrapy安裝Scrapy是Python的第三方框架,可以使用pip安裝、wheel安裝和源碼安裝等安裝方式。在安裝Scrapy之前,需要事先安裝lxml、pyOpenSSL、Twisted、PyWin32等相關(guān)的依賴庫(kù)。Scrapy框架的安裝步驟如下所示。第一步:安裝lxml解析庫(kù)。在命令窗口輸入“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對(duì)安裝結(jié)果進(jìn)行驗(yàn)證,結(jié)果如圖5-7所示。三、Scrapy操作指令Scrapy操作命令主要用于實(shí)現(xiàn)項(xiàng)目創(chuàng)建、項(xiàng)目運(yùn)行等操作,可以分為全局命令和項(xiàng)目命令。其中,全局命令在整個(gè)操作系統(tǒng)使用;項(xiàng)目命令只能在Scrapy項(xiàng)目?jī)?nèi)部使用。常用的Scrapy操作命令如表5-2所示。1.?shell在Scrapy中,在未啟動(dòng)spider的情況下,shell命令能夠啟動(dòng)一個(gè)shell交互窗口,嘗試或調(diào)試爬取代碼。在使用時(shí),shell命令會(huì)接收一個(gè)網(wǎng)頁(yè)地址。語(yǔ)法格式如下所示。scrapyshellurlshell命令使用后,會(huì)獲取整個(gè)地址的相關(guān)信息并將其以Response對(duì)象返回,之后可通過(guò)Response對(duì)象的相關(guān)方法或?qū)傩詫?duì)數(shù)據(jù)進(jìn)行獲取,如獲取頭部信息、獲取標(biāo)簽包含內(nèi)容等。Response對(duì)象的常用方法如表5-3所示。語(yǔ)法格式如下所示。response.bodyresponse.headersresponse.xpath()response.css()2.?startprojectstartproject命令是一個(gè)創(chuàng)建命令,主要用于實(shí)現(xiàn)Scrapy項(xiàng)目的創(chuàng)建,通過(guò)在命令后面加入項(xiàng)目的名稱即可創(chuàng)建項(xiàng)目。語(yǔ)法格式如下所示。scrapystartprojectProjectName下面使用startproject命令創(chuàng)建一個(gè)名為ScrapyProject的Scrapy項(xiàng)目,代碼如下所示。scrapystartprojectScrapyProject結(jié)果如圖5-10所示。Scrapy項(xiàng)目的目錄結(jié)構(gòu)非常簡(jiǎn)單,按照功能可以分為三個(gè)部分,分別是項(xiàng)目配置文件、項(xiàng)目設(shè)置文件、爬蟲代碼編寫文件。Scrapy項(xiàng)目結(jié)構(gòu)如圖5-11所示。Scrapy項(xiàng)目中各個(gè)文件的作用如表5-4所示。3.?genspidergenspider命令主要用于爬蟲文件的創(chuàng)建。在使用時(shí),會(huì)接收被爬取網(wǎng)站的地址,并在spiders目錄中創(chuàng)建一個(gè)指定名稱的爬蟲文件,代碼如下所示。scrapygenspiderSpiderNameurl其中,url為可選參數(shù),不使用時(shí),可以手動(dòng)在爬蟲文件中進(jìn)行添加。另外,genspider命令可以提供多個(gè)設(shè)置模板的參數(shù),當(dāng)不指定模板時(shí),默認(rèn)使用basic模板。常用參數(shù)如表5-5所示。4.?crawlcrawl命令主要用于實(shí)現(xiàn)Scrapy項(xiàng)目的運(yùn)行,在命令后面加入爬蟲文件名稱即可運(yùn)行Scrapy項(xiàng)目,代碼如下所示。scrapycrawlSpiderName另外,crawl命令在使用時(shí),還可以使用“-o”參數(shù)指定導(dǎo)出的文件名稱即可將數(shù)據(jù)保存到指定的文件中,包括JSON、CSV、XML等文件格式,代碼如下所示。scrapycrawlSpiderName-ofilepath使用crawl命令保存數(shù)據(jù)時(shí),保存的數(shù)據(jù)來(lái)自“items.py”文件中定義的各個(gè)字段,因此,需要在數(shù)據(jù)爬取成功后給定義的各個(gè)字段賦值。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)建一個(gè)簡(jiǎn)單的Scrapy爬蟲只需要五個(gè)步驟,分別是項(xiàng)目創(chuàng)建、爬蟲文件創(chuàng)建、明確字段、爬蟲制作、數(shù)據(jù)存儲(chǔ)。其中:(1)項(xiàng)目創(chuàng)建:通過(guò)startproject命令創(chuàng)建爬蟲項(xiàng)目。(2)爬蟲文件創(chuàng)建:通過(guò)genspider命令在spiders目錄中創(chuàng)建爬蟲文件。(3)明確字段:編寫items.py,明確抓取的目標(biāo)字段。(4)制作爬蟲:在爬蟲文件中編寫代碼開(kāi)始爬取網(wǎng)頁(yè),解析網(wǎng)頁(yè)內(nèi)容。(5)存儲(chǔ)內(nèi)容:設(shè)計(jì)管道(修改pipelines.py代碼)存儲(chǔ)爬取內(nèi)容。【任務(wù)描述】【知識(shí)準(zhǔn)備】一、字段定義在Scrapy中,字段的定義通過(guò)編寫items.py文件實(shí)現(xiàn),用于保存爬取數(shù)據(jù)。目前,字段的定義有兩種方式,都是通過(guò)自定義類實(shí)現(xiàn)的,只是類中包含的參數(shù)以及類屬性的定義存在不同。第一種方式包含參數(shù)為“scrapy.Item”,類屬性通過(guò)“scrapy.Field()”實(shí)現(xiàn),在Field()方法中,可以通過(guò)serializer參數(shù)指定序列化函數(shù),代碼如下所示。importscrapy#定義包含scrapy.Item參數(shù)的類classscrapyItem(scrapy.Item):#自定義字段name=scrapy.Field()age=scrapy.Field()第二種方式包含參數(shù)為“Item”,類屬性通過(guò)Field()方法實(shí)現(xiàn),但需要通過(guò)import導(dǎo)入Item和Field,與第一種方式相比,代碼更為精簡(jiǎn),代碼如下所示。#導(dǎo)入scrapy模塊importscrapy#導(dǎo)入scrapy的Item參數(shù)和Field方法fromscrapyimportItem,Field#定義包含Item參數(shù)的類classscrapyItem(Item):#自定義字段name=Field()age=Field()字段定義完成后,在爬蟲文件中需要引入該類并實(shí)例化,再通過(guò)實(shí)例化后對(duì)象加入中括號(hào)“[]”和定義的字段名稱實(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è)置通過(guò)修改settings.py文件實(shí)現(xiàn),只需指定屬性及其對(duì)應(yīng)的屬性值即可,如項(xiàng)目名稱、并發(fā)請(qǐng)求、爬取策略、項(xiàng)目管道等設(shè)置。Scrapy框架中常用的項(xiàng)目設(shè)置參數(shù)如表5-6所示。三、通用參數(shù)使用genspider命令在spiders文件下創(chuàng)建一個(gè)爬蟲文件,該文件就包含了內(nèi)置代碼,如下所示。importscrappyclassMyspiderSpider(scrapy.Spider):name='MySpider'allowed_domains=['']start_urls=['/']defparse(self,response):pass其中,類中包含的scrapy.Spider參數(shù)是Scrapy的通用spider。在爬取頁(yè)面時(shí),會(huì)通過(guò)start_urls指定地址獲取頁(yè)面內(nèi)容并以Response對(duì)象返回,再調(diào)用parse(self,response)方法對(duì)Response對(duì)象進(jìn)行處理。scrapy.Spider參數(shù)對(duì)應(yīng)的類屬性和可重寫方法如表5-7所示。在Scrapy中,除了通用的scrapy.Spider參數(shù)外,還提供多個(gè)具有特殊功能的參數(shù),如XML解析。常用參數(shù)如表5-8所示。1.?CrawlSpiderCrawlSpider參數(shù)允許指定爬取規(guī)則(Rule數(shù)據(jù)結(jié)構(gòu))實(shí)現(xiàn)頁(yè)面內(nèi)容的提取,這個(gè)Rule中包含提取和跟進(jìn)頁(yè)面的配置,Spider會(huì)根據(jù)Rule進(jìn)行操作,能夠滿足大多數(shù)的爬取需求。CrawlSpider除了繼承scrapy.Spider的方法和屬性,還提供了多個(gè)類屬性和可重寫方法,如表5-9所示。rules是爬取規(guī)則屬性,包含一個(gè)或多個(gè)Rule
對(duì)象的列表,多個(gè)Rule
對(duì)象通過(guò)逗號(hào)“,”連接,每個(gè)Rule定義爬取網(wǎng)站的規(guī)則,CrawlSpider會(huì)讀取rules的每一個(gè)Rule并進(jìn)行解析。Rule
方法代碼如下所示。fromscrapy.spidersimportCrawlSpider,Rulerules=(Rule(link_extractor,callback=None,cb_kwargs=None,follow=None,process_links=None,process_request=None))參數(shù)說(shuō)明如表5-10所示。其中,link_extractor通過(guò)LinkExtractor()方法實(shí)現(xiàn),提取Response中符合規(guī)則的鏈接,代碼如下所示。#從scrapy.linkextractors中導(dǎo)入LinkExtractorfromscrapy.linkextractorsimportLinkExtractorLinkExtractor(allow=(),deny=(),restrict_xpaths=(),restrict_css=(),deny_domains=())參數(shù)說(shuō)明如表5-11所示。2.?XMLFeedSpider與CrawlSpider相比,XMLFeedSpider針對(duì)的是XML,通過(guò)迭代器進(jìn)行各個(gè)節(jié)點(diǎn)的迭代來(lái)實(shí)現(xiàn)XML文件的解析,且繼承scrapy.Spider的屬性。XMLFeedSpider包含的常用類屬性和可重寫方法,如表5-12所示。為了與CrawlSpider的爬蟲文件區(qū)分,使用genspider命令創(chuàng)建一個(gè)新的爬蟲文件XMLSpider,再通過(guò)XMLFeedSpider進(jìn)行頁(yè)面爬取,代碼如下所示。結(jié)果如圖5-17所示。任務(wù)3文本解析爬取網(wǎng)頁(yè)后,Scrapy會(huì)將數(shù)據(jù)以Response對(duì)象的形式返回。本任務(wù)將使用選擇器實(shí)現(xiàn)Response對(duì)象的解析,主要內(nèi)容如下:(1)頁(yè)面解析;(2)提取數(shù)據(jù);(3)多頁(yè)提取。Scrapy提供了兩種用于解析文本的選擇器,即XPath選擇器和CSS選擇器,能夠通過(guò)特定的XPath或CSS表達(dá)式實(shí)現(xiàn)文本解析?!救蝿?wù)描述】【知識(shí)準(zhǔn)備】選擇的通用參數(shù)不同,選擇器的使用略有不同,在scrapy.Spider參數(shù)中,需要導(dǎo)入Selector解析Response對(duì)象后使用選擇器方法,代碼如下所示。在CrawlSpider和XMLFeedSpider中,直接使用選擇器方法即可,代碼如下所示。一、XPath選擇器與lxml庫(kù)的etree模塊下的XPath相比,Scrapy中的XPath選擇器同樣通過(guò)xpath()方法實(shí)現(xiàn),但Scrapy中的XPath選擇器將獲取結(jié)果以Selector格式返回,且同樣接收由符號(hào)和方法組成的路徑表達(dá)式進(jìn)行節(jié)點(diǎn)或節(jié)點(diǎn)集的選取。一些常用的路徑表達(dá)式示例如表5-13所示。通過(guò)text()方法獲取的文本存在于Selector中,需要通過(guò)Scrapy提供的相關(guān)方法從Selector中提取到節(jié)點(diǎn)的信息。目前,Scrapy提供了四種提取信息的方法,如表5-14所示。其中,extract_first()或get()方法總是返回一個(gè)結(jié)果,不管有多少匹配項(xiàng),都返回第一個(gè)匹配項(xiàng)的內(nèi)容;如果沒(méi)有匹配項(xiàng),則返回None。而extract()或getall()則會(huì)以列表的形式返回所有結(jié)果。二、CSS選擇器與XPath選擇器相比,CSS選擇器主要通過(guò)節(jié)點(diǎn)包含屬性以及節(jié)點(diǎn)之間的關(guān)系定位信息并提取數(shù)據(jù)。CSS選擇器通過(guò)css()方法實(shí)現(xiàn),獲取結(jié)果為Selector格式,且接受表達(dá)式作為參數(shù)。常用符號(hào)和方法如表5-15所示。CSS選擇器獲取結(jié)果同樣為Selector格式,且需要使用信息提取方法獲取Selector包含數(shù)據(jù),包含方法與XPath選擇器相同。任務(wù)4內(nèi)容存儲(chǔ)數(shù)據(jù)獲取完成后,可以將其保存到本地文件或數(shù)據(jù)庫(kù)中。本任務(wù)將提取后的數(shù)據(jù)通過(guò)Scrapy管道保存到MySQL數(shù)據(jù)庫(kù)中,主要內(nèi)容如下所示:(1)創(chuàng)建數(shù)據(jù)表;(2)修改配置文件;(3)存儲(chǔ)數(shù)據(jù);(4)數(shù)據(jù)查看。在Scrapy框架中,除使用rawl命令的“-o”參數(shù)將數(shù)據(jù)保存到本地JSON、CSV等文件中,還可以通過(guò)管道實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),且不僅可以將數(shù)據(jù)存儲(chǔ)到本地文件中,還可以
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《從永磁體談起》課件
- 中藥對(duì)營(yíng)養(yǎng)代謝性視網(wǎng)膜病變治療效果的研究進(jìn)展
- 浙江省五校聯(lián)盟【知識(shí)精研】高三上學(xué)期模擬預(yù)測(cè)地理試題講評(píng)課件
- 2024重慶市招聘社區(qū)工作者考試題庫(kù)帶答案
- 呼市地鐵新華廣場(chǎng)站弱電管線懸吊保護(hù)方案
- 2024年紙箱包裝設(shè)計(jì)與定制購(gòu)銷合同范本3篇
- 2024年銷售人員薪資調(diào)整與市場(chǎng)反饋合同3篇
- 2024年版汽車短租服務(wù)協(xié)議樣本版B版
- 2024挖機(jī)機(jī)械租賃合同書
- 2024施工工人勞動(dòng)權(quán)益保護(hù)勞動(dòng)合同范本3篇
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之15:“6策劃-6.4創(chuàng)新組合”(雷澤佳編制-2025B0)
- 廣東省廣州市天河區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末語(yǔ)文試題(含答案)
- DB32/T 4700-2024 蓄熱式焚燒爐系統(tǒng)安全技術(shù)要求
- 國(guó)有企業(yè)普法培訓(xùn)課件
- 小學(xué)數(shù)學(xué)自制教具學(xué)具的研究及探討
- 廣東省幼兒園一日活動(dòng)指引(試行)
- 光學(xué)材料-光學(xué)加工流程
- 奔馳卡車產(chǎn)品分析(課堂PPT)
- 反循環(huán)鉆孔灌注樁施工方案
- 新能源小客車購(gòu)車充電條件確認(rèn)書
- 發(fā)明專利專利答辯模板
評(píng)論
0/150
提交評(píng)論