大數(shù)據(jù)采集與預(yù)處理課件:Scrapy框架采集汽車之家靜態(tài)數(shù)據(jù)_第1頁
大數(shù)據(jù)采集與預(yù)處理課件:Scrapy框架采集汽車之家靜態(tài)數(shù)據(jù)_第2頁
大數(shù)據(jù)采集與預(yù)處理課件:Scrapy框架采集汽車之家靜態(tài)數(shù)據(jù)_第3頁
大數(shù)據(jù)采集與預(yù)處理課件:Scrapy框架采集汽車之家靜態(tài)數(shù)據(jù)_第4頁
大數(shù)據(jù)采集與預(yù)處理課件:Scrapy框架采集汽車之家靜態(tài)數(shù)據(jù)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

使用Scrapy爬蟲框架采集數(shù)據(jù)——爬取汽車之家數(shù)據(jù) 本章學(xué)習(xí)目標(biāo)了解Scrapy爬蟲框架的工作原理了解Scrapy爬蟲框架的安裝過程以及各組件的基本含義和用法掌握Scrapy爬蟲框架采集數(shù)據(jù)的實例6.4任務(wù)實現(xiàn) 【實例6-8】這里將使用Scrapy爬蟲框架創(chuàng)建一個Scrapy項目,編寫網(wǎng)絡(luò)爬蟲爬取和抽取汽車之家的文章標(biāo)題和內(nèi)容數(shù)據(jù),如圖6-4所示,并將數(shù)據(jù)輸出為JSON格式,同時存入MySQL中。圖6-4汽車之家文章欄目的標(biāo)題和內(nèi)容頁面現(xiàn)在需要在操作系統(tǒng)控制臺或PyCharm控制臺,使用scrapy命令:scrapystartprojectDemoAuto創(chuàng)建一個名為DemoAuto的項目,其中scrapystartproject為創(chuàng)建項目的固定語句,DemoAuto為自定義的項目名稱,如圖6-5所示。圖6-5創(chuàng)建Scrapy項目通過觀察,可以看見該項目被創(chuàng)建在createdin:C:\Users\Administrator\DemoAuto文件路徑中。因此,使用PyCharm將其打開。打開之后,即可看見DemoAuto的項目目錄。這和前面闡述的內(nèi)容完全一致,包括:spiders,item.py,middlewares.py,pipeline.py,settings.py,如圖6-6所示。scrapy.cfg:項目的配置文件DemoAuto/:該項目的名稱。DemoAuto/items.py:項目中的item文件,用于實例化數(shù)據(jù)模型item。DemoAuto/pipelines.py:項目中的pipelines文件,用于處理數(shù)據(jù)的存。DemoAuto/settings.py:項目的設(shè)置文件。DemoAuto/spiders/:放置spider代碼的目錄,用于自定義爬蟲的位置。圖6-6Scrapy項目目錄執(zhí)行“File”→“Settings”菜單命令,在彈出的“Settings”對話框的左側(cè)窗格中依次選擇“ProjectDemoAuto”→“ProjectInterpreter”選項,然后選擇Anaconda的包環(huán)境即可。這樣就完成Scrapy項目的建立和Anaconda包環(huán)境的配置,如圖6-7所示。圖6-7配置Anaconda包環(huán)境執(zhí)行“File”→“Settings”菜單命令,在彈出的“Settings”對話框的左側(cè)窗格中依次選擇“ProjectDemoAuto”→“ProjectInterpreter”選項,然后選擇Anaconda的包環(huán)境即可。這樣就完成Scrapy項目的建立和Anaconda包環(huán)境的配置,如圖6-7所示。圖6-7配置Anaconda包環(huán)境現(xiàn)在在工程文件中的spiders目錄中創(chuàng)建一個名為SpiderDemo.py的文件。該文件的作用是編寫自定義的spider代碼。代碼如下。引入scrapy模塊importscrapy引入本地DemoAutoField中的AutoItem模板用于存儲指定的數(shù)據(jù)。fromDemoAuto.DemoAutoFieldimportAutoItem自定義一個類,并將scrapy模塊的Spider作為參數(shù)傳入。類scrapy.spiders.Spider是最簡單的spider,所有的spider包括自己定義的和scrapy提供的都會繼承它。它只是提供最基本的特性,也是最常用的Spider類。

classMyScr(scrapy.Spider):

設(shè)置全局唯一的name,作為啟動該spider的時候的識別名稱。

name='DemoAuto'

填寫爬取地址,作為該spider第一次爬取的url。start_urls=['./all/#pvareaid=3311229‘]編寫自定義爬取方法。這里使用parse方法傳入self和response作為參數(shù),其中,response作為從start_urls返回的響應(yīng)數(shù)據(jù)。

defparse(self,response):

實例化一個容器item,并保存爬取的信息

item=AutoItem()

這部分是爬取部分,使用xpath的方式選擇信息,具體方法根據(jù)網(wǎng)頁結(jié)構(gòu)而定,這里將爬去汽車之家的文章標(biāo)題和內(nèi)容。先獲取每個課程的div。

forboxinresponse.xpath('//*[@id="auto-channel-lazyload-article"]/ul/li/a'):獲取指定的標(biāo)題和內(nèi)容,并賦值給item容器的兩個字段。這里使用了extract()[0].strip()表示在循環(huán)中每次只抽取第一個元素的內(nèi)容,并除去左右空白。

item['title']=box.xpath('.//h3/text()').extract()[0].strip()item['content']=box.xpath('.//p/text()').extract()[0].strip()

返回信息

yielditem

在與items.py的同級目錄中創(chuàng)建一個名為DemoAutoField.py的文件。該文件的作用是替代items.py,用于實例化數(shù)據(jù)模型item。代碼如下。引入scrapy模塊importscrapy

編寫model模板

classAutoItem(scrapy.Item):

儲存標(biāo)題。這里使用scrapy.Field()創(chuàng)建兩個字段模型,title和content給item。

title=scrapy.Field()content=scrapy.Field()在與pipelines.py的同級目錄中創(chuàng)建一個名為DemoAutoPipelines.py的文件。該文件的作用是替代pipelines.py,用于處理數(shù)據(jù)的存儲。代碼如下。引入scrapy模塊importjson自定義一個名為AutoPipeline的類,并接受一個object對象作為參數(shù)。classAutoPipeline(object):def__init__(self):打開文件。如果沒有創(chuàng)建該文件則自動創(chuàng)建一個名為data.json的文件。并使用utf-8作為字符集編碼格式。

self.file=open('data.json','w',encoding='utf-8')process_item方法用于處理數(shù)據(jù)。這里處理的數(shù)據(jù)是傳進來的item容器數(shù)據(jù)。

defprocess_item(self,item,spider):讀取item中的數(shù)據(jù)。使用json.dumps將item轉(zhuǎn)為JSON格式,之前先使用dict轉(zhuǎn)為字典數(shù)據(jù)。

line=json.dumps(dict(item),ensure_ascii=False)+"\n"

寫入文件

self.file.write(line)

返回itemreturnitemopen_spider方法在spider被開啟時被調(diào)用。

defopen_spider(self,spider):passclose_spider方法在spider被關(guān)閉時被調(diào)用。

defclose_spider(self,spider):pass到此已經(jīng)完成了一個簡單的scrapy爬蟲的編寫。在控制臺中使用scrapycrawlDemoAuto來運行一下,如圖6-8所示。圖6-8爬取的文章標(biāo)題和內(nèi)容

在獲得了指定的數(shù)據(jù)之后,現(xiàn)在需要將數(shù)據(jù)持久化保存到MySQL中。之前,需要先在MySQL中創(chuàng)建一個名為file123的數(shù)據(jù)庫以及數(shù)據(jù)表table123,其中包含字段title,content,如圖6-9所示。圖6-9創(chuàng)建數(shù)據(jù)庫和表a)創(chuàng)建指定數(shù)據(jù)庫和表的SQL語句b)數(shù)據(jù)庫目錄a)b)在與pipelines.py的同級目錄中創(chuàng)建一個名為MySQLPipelines.py的文件。該文件的作用是替代pipelines.py,用于將數(shù)據(jù)持久化保存到MySQL。代碼如下。引入pymysql模塊importpymysql自定義一個方法dbHandle用于連接MySQL。defdbHandle():conn=pymysql.connect("localhost","root","xxxx","file123")returnconn自定義一個名為MySQLPipeline的類,并傳入一個object參數(shù)。classMySQLPipeline(object):使用process_item方法打開MySQL數(shù)據(jù)庫連接,并執(zhí)行SQL語句。

defprocess_item(self,item,spider):dbObject=dbHandle()#實例化一個MySQL連接對象

cursor=dbObject.cursor()#使用游標(biāo)操作數(shù)據(jù)庫向數(shù)據(jù)庫中插入指定的數(shù)據(jù)。

sql='insertintotable123(title,content)values(%s,%s)'try:執(zhí)行SQL語句,并傳入?yún)?shù)。

cursor.execute(sql,(item['title'],item['content']))dbObjectmit()except:dbObject.rollback()returnitem運行結(jié)果如圖6-10所示。圖6-10將數(shù)據(jù)存入MySQL在寫好了DemoAutoPipelines.py和MySQLPipelines.py之后,還需要在settings.py中進行配置。代碼如下。這里的數(shù)字范圍是在1-1000,表示Pipeline執(zhí)行的優(yōu)先級,數(shù)字越小優(yōu)先級越大。ITEM_PIPELINES={'DemoAuto.DemoAutoPipelines.AutoPipeline':300,#保存到文件中

'DemoAuto.MySQLPipeline.MySQLPipeline':300,#保存到mysql數(shù)據(jù)庫}到此實現(xiàn)了scrapy爬取汽車之家文章

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論