Python基礎(chǔ)與大數(shù)據(jù)應用-第八章-Python爬蟲框架課件_第1頁
Python基礎(chǔ)與大數(shù)據(jù)應用-第八章-Python爬蟲框架課件_第2頁
Python基礎(chǔ)與大數(shù)據(jù)應用-第八章-Python爬蟲框架課件_第3頁
Python基礎(chǔ)與大數(shù)據(jù)應用-第八章-Python爬蟲框架課件_第4頁
Python基礎(chǔ)與大數(shù)據(jù)應用-第八章-Python爬蟲框架課件_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第八章 Python爬蟲框架目 錄 Contents01常見爬蟲框架02Scrapy安裝03Scrapy爬蟲框架04Scrapy常用工具命令0506Scrapy爬蟲實戰(zhàn)項目訓練07小結(jié)常見爬蟲框架010102030405爬蟲框架Scrapy是Python開發(fā)的一個快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測和自動化測試。Scrapy吸引人的地方在于它是一個框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等。ScrapyCrawley能高速爬取對應網(wǎng)

2、站的內(nèi)容,支持關(guān)系和非關(guān)系數(shù)據(jù)庫,數(shù)據(jù)可以導出為JSON、XML等。CrawleyPortia是一個用Python編寫無需任何編程知識,就能可視化爬取網(wǎng)站數(shù)據(jù)的開源工具。Portia 是運行在Web瀏覽器中,Portia 提供了可視化的Web 頁面,只需通過簡單單擊,標注頁面上需提取的相應數(shù)據(jù),即可完成爬取規(guī)則的開發(fā),這些規(guī)則還可在Scrapy中使用,用于抓取頁面。PortiaPySpider是一個強大的網(wǎng)絡(luò)爬蟲系統(tǒng),并帶有強大的WebUI。采用Python語言編寫,分布式架構(gòu),支持多種數(shù)據(jù)庫后端,強大的WebUI支持腳本編輯器,任務監(jiān)視器,項目管理器以及結(jié)果查看器。PySpiderBeaut

3、iful Soup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫。它能夠通過你喜歡的轉(zhuǎn)換器實現(xiàn)慣用的文檔導航、查找、修改文檔的方式。Beautiful Soup會幫你節(jié)省數(shù)小時甚至數(shù)天的工作時間。在獲取html元素時,都是用bs4完成的。Beautiful Soup常見爬蟲框架06Grab框架,可以構(gòu)建各種復雜的網(wǎng)頁抓取工具,從簡單的5行腳本到處理數(shù)百萬個網(wǎng)頁的復雜異步網(wǎng)站抓取工具。Grab提供一個API用于執(zhí)行網(wǎng)絡(luò)請求和處理接收到的內(nèi)容。Grab07Cola是一個分布式的爬蟲框架,對于用戶來說,只需編寫幾個特定的函數(shù),而無需關(guān)注分布式運行的細節(jié)。任務會自動分配到多臺機器上,整個過

4、程對用戶是透明的。ColaScrapy安裝02第一步 如Python和pip的版本比較低,需要將其升級。Python3.7安裝方法按照第一章方法安裝即可。pip3安裝命令為【apt-get install Python3-pip】安裝scrapy的依賴包 【sudo apt-get install python3 python3-dev python-pip libxml2-dev libxslt1-dev libffi-dev libssl-dev zlib1q-dev】在/home目錄下用mkdir命令建立scrapy文件夾利用pip3命令安裝scrapy【pip install scra

5、py】scrapy安裝第二步第三步查看版本第四步【cd /home】【mkdir scrapy】Scrapy爬蟲框架03Scrapy爬蟲框架Scrapy框架組件功 能Scrapy引擎(Scrapy Engine)負責處理整個系統(tǒng)的數(shù)據(jù)流,并在相應動作時觸發(fā)事件(框架核心)調(diào)度器(Scheduler)接受引擎發(fā)過來的Request請求,并加入隊列中,并在引擎再次發(fā)來Request請求的時候提供給引擎下載器(Downloader)負責獲取網(wǎng)頁內(nèi)容并將網(wǎng)頁內(nèi)容返回給蜘蛛spider爬蟲(Spiders)Scrapy用戶編寫用于分析Response并提取Item的類項目管道(Item Pipeline

6、)位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應下載器中間件(Downloader Middlewares)位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應爬蟲中間件(Spider Middlewares)介于Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛(Spiger)的響應輸入(Response)和請求輸出(Item和Request)調(diào)度中間件(Scheduler Middewares)介于Scrapy引擎和調(diào)度之間的中間件,處理從Scrapy引擎發(fā)送到調(diào)度的請求和響應Scrapy數(shù)據(jù)流運行過程st

7、ep1引擎打開一個網(wǎng)站,找到處理該網(wǎng)站的Spider并向該Spider請求第一個要抓取的URL。step2引擎從Spider中獲取第一個要爬取的URL并通過調(diào)度器(Scheduler)和Request進行調(diào)度。step3引擎從調(diào)度器請求下一個要爬取的URLstep4調(diào)度器返回下一個要爬取的URL給引擎,引擎將URL封裝成一個請求(Request),通過下載中間件轉(zhuǎn)發(fā)給下載器step5頁面下載完畢后,下載器把資源封裝成應答包(Response),并將其通過下載中間件發(fā)送給引擎step6引擎從下載器中接收到Response并通過Spider中間件發(fā)送給Spider處理step7Spider處理Re

8、sponse并返回爬取到的Item和新的Request發(fā)送給引擎step8引擎將爬取到的Item交給Item Pipeline,將Request給調(diào)度器Scrapy常用工具命令04創(chuàng)建一個Scrapy項目 在爬取之前,需先創(chuàng)建一個新的Scrapy項目。在Ubuntu16.04、Python3.7環(huán)境中,在/home/scapy/路徑下建立一個文件夾,命令為【mkdir pyscr】,接下來進入該文件夾,在終端輸入命令【scrapy startproject pyscr】,即可創(chuàng)建一個名為pyscr的項目,如圖所示。創(chuàng)建一個Scrapy項目pyscr項目內(nèi)容:scrapy.cfg: 項目配置文件

9、pyscr/: 項目Python模塊, 代碼將從這里導入pyscr/items.py: 項目items文件pyscr/middlewares.py:定義spider中間件和downloader中間件pyscr/pipelines.py: 項目管道文件pyscr/settings.py: 項目設(shè)置文件pyscr/spiders: 放置Spider的目錄【tree】命令查看項目結(jié)構(gòu),pyscr項目中包含如圖所示內(nèi)容Scrapy全局命令在Scrapy框架中,提供了兩種類型的命令:一種是針對項目的命令(即需要有項目,該命令才能成功運行);另一種為全局命令,這些命令不需要有項目就能運行(在有項目的情況下

10、,這些命令也能運行)。全局命令一共有8個,具體如下: startprojectsettingsrunspidershellfetchviewversionbenchScrapy全局命令startproject命令語法:scrapy startproject 功能:在目錄project_name下創(chuàng)建一個名為project_name的Scrapy項目 。用法示例:【scrapy startproject myproject】settings命令語法:scrapysettingsoptions功能:查看scrapy對應的配置信息,如果在項目目錄內(nèi)使用該命令,查看的是對應項目的配置信息,如果在項目外

11、使用查看的是scrapy默認配置信息。用法示例:【scrapy settings -get BOT_NAME】獲取得到蜘蛛項目的名稱,如果沒有獲取結(jié)果則返回none輸出結(jié)果:scrapybotScrapy全局命令runspider命令語法:scrapyrunspider功能:在未創(chuàng)建項目的情況下,運行一個編寫好的Python文件中的spider。用法示例:【scrapy runspider myspider.py】輸出結(jié)果: . spider starts crawling . shell命令語法:scrapyshellurl功能:以給定的URL(如果給出)或者空(沒有給出URL)啟動Scra

12、py shell。用法示例:【scrapy shell 】運行結(jié)束后,在終端屏幕上會出現(xiàn)抓取的控制信息Scrapy全局命令fetch命令語法:scrapyfetch功能:使用Scrapy下載器(downloader)下載給定的URL,并將獲取到的內(nèi)容送到標準輸出。該命令以spider下載頁面的方式獲取頁面。如果實際在項目中運行,fetch將會使用項目中spider的屬性訪問,如果該命令不在項目中運行,則會使用默認Scrapy downloader設(shè)定。用法示例:【scrapy fetch -nolog 】【scrapy fetch -nolog -headers 】view命令語法:scrap

13、yview功能:在瀏覽器中打開給定的URL,并以Scrapy spider獲取到的形式展現(xiàn)。有時候spider獲取到的頁面和普通用戶看到的并不相同,此該命令可以用來檢查spider所獲取到的頁面,并確認與用戶看到的一致。應用示例:【scrapy view 】Scrapy全局命令version命令語法:scrapyversion-v功能:輸出Scrapy版本。配合-v運行時,該命令同時輸出Python, Twisted以及平臺的信息,方便bug提交。應用示例:【scrapy version v】bench命令語法:scrapybench功能:運行benchmark測試,測試Scrapy在硬件上的

14、效率。Scrapy項目命令項目命令需要在有Scrapy項目的情況下,這些命令才能運行。項目命令主要有以下幾個:crawlchecklisteditparsedeploygenspiderScrapy項目命令crawl命令語法:scrapycrawl功能:運行Scrapy項目,使用spider進行爬取。應用示例:【scrapy crawl pyscr】check命令語法:scrapycheck-l功能:運行contract檢查。應用示例:【scrapy check l】Scrapy項目命令list命令語法:scrapylist功能:列出當前項目中所有可用的spider。每行輸出一個spider。

15、應用示例:【scrapy list】edit命令語法:scrapyedit功能:使用EDITOR中設(shè)定的編輯器編輯給定的spider。該命令僅僅是提供一個快捷方式。開發(fā)者可以自由選擇其它工具或者IDE來編寫調(diào)試spider。應用示例:【scrapy edit spider1】Scrapy項目命令parse命令語法:【scrapyparseoptions】功能:獲取給定的URL并使用相應的spider分析處理。如果提供-callback選項,則使用spider中的解析方法處理,否則使用parse。支持的選項:-spider=SPIDER: 跳過自動檢測spider并強制使用特定的spider-a

16、NAME=VALUE: 設(shè)置spider的參數(shù)(可能被重復)-callbackorc:spider中用于解析返回(response)的回調(diào)函數(shù)-pipelines:在pipeline中處理item-rules or-r:使用CrawlSpider規(guī)則來發(fā)現(xiàn)用來解析返回(response)的回調(diào)函數(shù)-noitems:不顯示爬取到的item-nolinks:不顯示提取到的鏈接-nocolour:避免使用pygments對輸出著色-depthord:指定跟進鏈接請求的層次數(shù)(默認1)-verboseorv: 顯示每個請求的詳細信息應用示例:【scrapy parse “/” -c parse_ite

17、m】Scrapy項目命令deploy命令語法:scrapydeploy |-l|-L功能:將項目部署到Scrapyd服務。genspider命令語法:scrapy genspider -t template 功能:在當前項目中創(chuàng)建一個新的的spiders。這僅是創(chuàng)建spider的一種快捷方式,該方法可以使用提前定義好的模板來生成spider,也可自己創(chuàng)建spider的源碼文件,應用示例如圖所示。Scrapy爬蟲實戰(zhàn)05Scrapy爬蟲實戰(zhàn) 在Ubuntu16.04,Python3.7環(huán)境下,創(chuàng)建一個Scrapy項目,爬取“糗事百科”中“穿越”網(wǎng)頁中網(wǎng)友發(fā)表的糗事內(nèi)容,并將內(nèi)容保存在文本文件中。

18、1. 創(chuàng)建Scrapy項目qsbk在爬取之前,必須創(chuàng)建一個新的Scrapy項目。在/home/scrapy目錄下建立qsbk目錄,并在/home/scrapy/qsbk目錄下用【scrapy startproject qsbk】命令創(chuàng)建項目,如下圖所示。Scrapy爬蟲實戰(zhàn)2. 設(shè)置settings.py文件settings.py文件是項目的配置文件,常用的參數(shù)有:BOT_NAME = qsbk ,Scrapy項目的名字,使用startproject 命令創(chuàng)建項目時被自動賦值;SPIDER_MODULES = qsbk.spiders ,Scrapy搜索spider的模塊列表,創(chuàng)建項目時被自動

19、賦值;NEWSPIDER_MODULE = qsbk.spiders ,使用 genspider 命令創(chuàng)建新spider的模塊,創(chuàng)建項目時被自動賦值;ROBOTSTXT_OBEY = True,是否遵守robots.txt協(xié)議,默認遵守robots.txt協(xié)議。robots.txt是遵循 Robot協(xié)議的一個文件,它保存在網(wǎng)站的服務器中,作用是告訴搜索引擎爬蟲,本網(wǎng)站哪些目錄下的網(wǎng)頁不希望被爬取收錄。在Scrapy啟動后,會在第一時間訪問網(wǎng)站的robots.txt文件,然后決定該網(wǎng)站的爬取范圍。在某些情況下希望獲取的是被robots.txt所禁止訪問的,此時可將此配置項設(shè)置為False來獲取數(shù)

20、據(jù);Scrapy爬蟲實戰(zhàn)CONCURRENT_REQUESTS = 16,開啟線程數(shù)量,默認16;AUTOTHROTTLE_START_DELAY = 3,開始下載時限速并延遲時間;AUTOTHROTTLE_MAX_DELAY = 60,高并發(fā)請求時最大延遲時間;DEFAULT_REQUEST_HEADERS = Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8, Accept-Language: en, ,這個參數(shù)是設(shè)置瀏覽器請求頭,很多網(wǎng)站都會檢查客戶端的headers,可以在該參數(shù)里設(shè)置模擬瀏覽

21、器;ITEM_PIPELINES = demo1.pipelines.Demo1Pipeline: 300,,Pipeline的路徑,300表示優(yōu)先級,范圍(0-1000),值越小級別越高;具體設(shè)置qsbk項目的settings.py文件:(1)設(shè)置ROBOTSTXT_OBEY參數(shù):ROBOTSTXT_OBEY = False(2)設(shè)置AUTOTHROTTLE_START_DELAY參數(shù):刪除參數(shù)前的“#”,AUTOTHROTTLE_START_DELAY = 3(3)設(shè)置ITEM_PIPELINES參數(shù):刪除該參數(shù)中所有“#”(4)設(shè)置DEFAULT_REQUEST_HEADERS參數(shù):刪除

22、該參數(shù)中所有“#”,并添加“User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36,”,偽裝成瀏覽器訪問Scrapy爬蟲實戰(zhàn)3. 設(shè)置items.py文件items.py負責數(shù)據(jù)模型的建立,是項目中的Item對象。Item對象是保存爬取到的數(shù)據(jù)的容器;其使用方法和Python字典類似,并且提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤。Item使用簡單的class定義語法和Field對象聲明。在新建的qsbk項

23、目中,使用items.py來定義存儲的Item類,這個類需要繼承scrapy.Item。其代碼下圖所示。Scrapy爬蟲實戰(zhàn)4.創(chuàng)建spider爬蟲文件爬蟲模塊的代碼都放置與spiders文件夾中。爬蟲模塊是用于從單個網(wǎng)站或多個網(wǎng)站爬取數(shù)據(jù)的類,其中應包含初始頁面的URL、跟進網(wǎng)頁鏈接、分析頁面內(nèi)容、提取數(shù)據(jù)方法。為了創(chuàng)建一個Spider爬蟲,必須繼承 scrapy.Spider 類,且定義以下三個屬性:name: 用于區(qū)別Spider。該名字必須是唯一的,不可為不同的Spider設(shè)定相同的名字start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面

24、將是其中之一。后續(xù)的URL則從初始的URL獲取到的數(shù)據(jù)中提取parse(): 是spider的一個方法。 被調(diào)用時,每個初始URL完成下載后生成的 response 對象將會作為唯一的參數(shù)傳遞給該函數(shù)。該方法負責解析返回的數(shù)據(jù)(response data),提取數(shù)據(jù)(生成item)以及生成需要進一步處理的URL的Request對象。 Scrapy爬蟲實戰(zhàn)在spiders文件夾(cd /spiders)下創(chuàng)建qsbk.py文件(vim qsbk.py),qsbk.py中的代碼如圖所示。需要注意的是,這段代碼中不僅需要下載網(wǎng)頁數(shù)據(jù),還需要對這些數(shù)據(jù)進行提取。Scrapy有自己的數(shù)據(jù)提取機制-選擇器

25、(selector基于lxml庫),它通過Xpath或者CSS表達式來提取HTML文件中的內(nèi)容。Scrapy爬蟲實戰(zhàn)(1)Xpath XPath是XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。Xpath使用路徑表達式來選取XML文檔中的節(jié)點或者節(jié)點集。這些路徑表達式和在常規(guī)的電腦文件系統(tǒng)中看到的表達式非常相似。節(jié)點是通過沿著路徑 (path) 或者步 (steps) 來選取的。在Xpath中,有七種類型的節(jié)點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節(jié)點。XML文檔是被作為節(jié)點樹來對待的,樹的根被稱為文檔節(jié)點或者根節(jié)點。示例

26、XML文檔如下: Harry Potter J K. Rowling 2005 29.99 上面XML文檔中的節(jié)點: (文檔節(jié)點)、J K. Rowling (元素節(jié)點)、lang=en (屬性節(jié)點)。節(jié)點有:父、子、同胞、先輩、后代,5種關(guān)系。按照上方的xml文件book就是title的父節(jié)點,title就是book的子節(jié)點,author和title是同胞,bookstore是author和title的先輩,反之a(chǎn)uthor是bookstore的后代。選取節(jié)點Xpath使用路徑表達式在XML文檔中選取節(jié)點。節(jié)點是通過沿著路徑或者step來選取的。表8- 1列出了最有用的路徑表達式。對上面XM

27、L代碼進行節(jié)點選取,其表達式如下表所示。Scrapy爬蟲實戰(zhàn)表達式描 述nodename選取此節(jié)點的所有子節(jié)點/從根節(jié)點選取/從匹配選擇的當前節(jié)點選擇文檔中的節(jié)點,而不考慮它們的位置。.選取當前節(jié)點.選取當前節(jié)點的父節(jié)點選取屬性路徑表達式結(jié) 果bookstore選取bookstore元素的所有子節(jié)點/bookstore選取根元素bookstore。假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對路徑!bookstore/book選取屬于bookstore的子元素的所有book元素/book選取所有book子元素,而不管它們在文檔中的位置bookstore/book選擇屬于book

28、store元素的后代的所有book元素,而不管它們位于 bookstore之下的什么位置/lang選取名為lang的所有屬性選取未知節(jié)點XPath通配符可用來選取未知的XML元素。常用的通配符如下表所示。對上述XML代碼,下表列出了一些路徑表達式,以及這些表達式的結(jié)果。Scrapy爬蟲實戰(zhàn)通配符描 述*匹配任何元素節(jié)點*匹配任何屬性節(jié)點node()匹配任何類型的節(jié)點路徑表達式結(jié) 果/bookstore/*選取 bookstore 元素的所有子元素/*選取文檔中的所有元素/title*選取所有帶有屬性的 title 元素Scrapy爬蟲實戰(zhàn) 下面,以糗事百科網(wǎng)站為例,初始網(wǎng)站為/history/

29、,需要抓取網(wǎng)頁中的“糗事”。首先分析這張網(wǎng)頁中的元素。用瀏覽器打來該網(wǎng)頁,右擊打開快捷菜單,選擇“檢查”(谷歌瀏覽器)或“查看元素”(火狐瀏覽器)或“檢查元素”(IE瀏覽器)命令,查看頁面元素,如圖所示。Scrapy爬蟲實戰(zhàn) 從下圖可以看出,網(wǎng)友發(fā)表“糗事”所有信息都放置在中,根據(jù)Xpath的編寫規(guī)則,其xpath路徑表達式可以寫為“/divclass=col1/div”。而需要爬取的“糗事”文字內(nèi)容都存放在*中(*為具體的“糗事”,如圖8- 14所示),因此其xpath可以寫為“./divclass=content/span/text()”。Scrapy爬蟲實戰(zhàn)(2)選擇器(Selector

30、)有了Xpath路徑表達式還不能直接進行網(wǎng)頁數(shù)據(jù)提取,還需要一個提取機制。而在Scrapy框架中有一套自己的數(shù)據(jù)提取機制,稱為選擇器(selector),它通過特定的Xpath或CSS表達式來選擇HTML文件中的某個部分。Scrapy選擇器構(gòu)建于lxml庫之上,因此它們在速度和解析準確性上非常相似。Selector選擇器有四個基本的方法:xpath(表達式):傳入Xpath表達式,返回該表達式對應的節(jié)點列表。css(表達式):傳入CSS表達式,返回該表達式對應的節(jié)點列表。extract(): 返回被選擇元素的unicode字符串的列表。Extract()表示所有的元素,extract_firs

31、t()表示第一個元素。re(表達式):返回通過正則表達式提取的unicode字符串列表。選擇器在使用方式上很方便,可以使用傳入的response直接調(diào)用,如response.xpath(表達式)、response.css(表達式)。調(diào)用方法很簡單,而構(gòu)建xpath和css比較復雜。Scrapy框架中提供了一種簡便的方式來查看Xpath表達式是否正確有用。Scrapy爬蟲實戰(zhàn) 在終端窗口輸入命令【scrapy shell URL】,成功運行就會有返回結(jié)果。如【scrapy shell 】,其返回結(jié)果如圖所示。 從圖中看到response就是訪問以上網(wǎng)址獲得的響應,接下來輸入【response.x

32、path(“./divclass=content/span/text()”).extract()】,驗證Xpath表達式的正確性,如果正確就能抽取當前網(wǎng)頁中所有糗事的內(nèi)容,如不正確,則返回值為空。Scrapy爬蟲實戰(zhàn) 5.設(shè)置pipelines文件 pipelines文件負責對spider返回數(shù)據(jù)進行處理,可以將數(shù)據(jù)寫入數(shù)據(jù)庫,也可以寫入到文件等。該項目中將數(shù)據(jù)寫入到文本文件。代碼如圖所示。Scrapy爬蟲實戰(zhàn) 6.運行Scrapy項目 在qsbk目錄下,用crawl命令運行Scrapy項目?!緎crapy crawl qsbk】運行結(jié)束后,在該目錄下生成文本文件qsbk.txt,使用命令【c

33、at qsbk.txt】查看其內(nèi)容。項目運行及結(jié)果見下面2個圖所示。項目運行的結(jié)果由于網(wǎng)頁在變動,因此結(jié)果不盡相同。項目訓練:用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件06用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件 (1)用Scrapy框架抓取把豆瓣網(wǎng)( /tag/中國文學)中的圖書信息(包括書名、作者、類別、評價、評價人數(shù)、圖書類別);(2)將抓取的數(shù)據(jù)保存到MySQL數(shù)據(jù)庫中。 訓練目標通過對Scarpy爬取項目的設(shè)計與實現(xiàn),掌握Scrapy框架的用法和MySQL的基本操作,會用Scrapy框架爬取網(wǎng)頁數(shù)據(jù)并保存至數(shù)據(jù)庫。訓練內(nèi)容 (1)任務分析Scrapy是一個為了爬

34、取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應用框架??梢詰迷诎〝?shù)據(jù)挖掘,信息處理或存儲歷史數(shù)據(jù)等一系列的程序中。MySQL是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),MySQL數(shù)據(jù)庫系統(tǒng)使用最常用的數(shù)據(jù)庫管理語言結(jié)構(gòu)化查詢語言(SQL)進行數(shù)據(jù)庫管理。本項目使Scrapy框架首先抓取豆瓣網(wǎng)上的圖書信息,通過創(chuàng)建項目、設(shè)置items.py文件和pipelines.py文件、創(chuàng)建spider.py文件等操作進行抓取。然后將抓取的信息通過創(chuàng)建數(shù)據(jù)庫、創(chuàng)建存放圖書信息的數(shù)據(jù)表等操作存儲到MySQL數(shù)據(jù)庫中。本項目的關(guān)鍵是Xpath表達式的構(gòu)建。項目需要抓取的URL為/tag/中國文學,抓取網(wǎng)頁中

35、圖書的書名、作者、評價、評價人數(shù)、圖書信息。通過瀏覽器的元素分析,可以知道這些信息的xpath路徑為:每本圖書的信息都保存在class=“info”的div里面,其對應的xpath路徑為/divclass=“info” ;書名h2的下一個a標簽里面,其對應的xpath路徑為./h2/a/text();作者在class=“pub”的div標簽里面,其對應的xpath路徑為 ./divclass=pub/text() ;評分在第二個div標簽下的第二個span標簽里面,其對應的xpath路徑為./div2/span2/text();評價人數(shù)在第二個div標簽下的第三個span標簽里面,其對應的xp

36、ath路徑為./div2/span3/text() ;后頁的鏈接在class=“paginator”div標簽下的屬性為class=next的span標簽下面的一個a標簽里面的href屬性里面,其對應的xpath路徑為divclass=paginator/spanclass=next/a/href。訓練步驟用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件 (2)項目實施新建Scrapy項目douban在Ubuntu的終端依次完成以下操作:【cd /home】切換到home目錄;【ls】查看該目錄下的所有內(nèi)容;【mkdir scrapy】在home目錄下創(chuàng)建scrapy文件夾;【cd scr

37、apy】進入scrapy文件夾;【scrapy startproject douban】創(chuàng)建Scrapy項目douban;【ls】查看創(chuàng)建成功的scrapy項目douban。設(shè)置settings.py文件在Ubuntu的終端依次完成以下操作:【cd /home/scrapy/douban/douban】進入douban目錄;【ls】查看該目錄下的所有內(nèi)容,找到settings.py文件;【vim settings.py】打開setting.py文件并編輯,修改如下數(shù)據(jù):ROBOTSTXT = False、刪除ITEM_PIPELINES參數(shù)前“#”、USER_AGENT參數(shù)前“#”去掉,并將參

38、數(shù)值改為“USER_AGENT = Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36”,保存退出。用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件訓練步驟項目訓練 設(shè)置items.py文件【vim items.py】打開并編輯文件,添加如下數(shù)據(jù)(將pass改成以下5行): book_name = scrapy.Field() author = scrapy.Field()grade = scrapy.Field() count =

39、 scrapy.Field() introduction = scrapy.Field()保存退出用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件訓練步驟爬蟲編寫【cd /home/scrapy/douban/douan/spiders】切換至spiders目錄下;【vim doubanspider.py】創(chuàng)建與編輯爬蟲文件,導入要爬取的數(shù)據(jù)項,構(gòu)建爬蟲所需的name、URL及爬取的內(nèi)容,添加代碼如下:import scrapyfrom douban.items import DoubanItemclass DoubanspiderSpi

40、der(scrapy.Spider): name = doubanspider allowed_domains = def start_requests(self): url = /tag/%E4%B8%AD%E5%9B%BD%E6%96%87%E5%AD%A6 yield scrapy.Request(url,callback=self.parse ,dont_filter=True) def parse(self,response): item = DoubanItem() info_list = response.xpath(/divclass=info) for info in inf

41、o_list: itembook_name = info.xpath(./h2/a/text().extract_first().strip() itemauthor= info.xpath(./divclass=pub/text().extract_first().strip().split(/)0 itemgrade= info.xpath(./div2/span2/text().extract_first() itemcount= info.xpath(./div2/span3/text().extract_first() itemintroduction= info.xpath(./p

42、/text().extract_first() yield item next_temp_url = response.xpath(/divid=subject_list/divclass=paginator/spanclass=next/a/href).extract_first() if next_temp_url: next_url = response.urljoin(next_temp_url) yield scrapy.Request(next_url) 用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件訓練步驟項目訓練 代碼如圖所示用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)

43、庫文件訓練步驟項目訓練 運行爬蟲并將其保存至csv文件【cd /home/scrapy/douban】返回douban目錄下;【ls】 查看其中文件,確保有douban文件夾和scrapy.cfg文件后;【scrapy crawl doubanspider o doubanread.csv】運行爬蟲;【ls】查看其中文件,發(fā)現(xiàn)生成doubanread.csv文件【cat doubanread.csv】查看文件內(nèi)容結(jié)果。創(chuàng)建MySQL數(shù)據(jù)庫douban和數(shù)據(jù)表doubanread【mysql -u root -p】終端輸入命令后,在Enter password: 后輸入密碼*,進入MySQL數(shù)據(jù)

44、庫; 創(chuàng)建名為douban的數(shù)據(jù)庫:mysql create database douban; 顯示所有的數(shù)據(jù)庫:mysql show databases;選擇douban數(shù)據(jù)庫:mysql use douban;在MySQL數(shù)據(jù)庫里創(chuàng)建表doubanread,命令如下:mysql CREATE TABLE doubanread(id int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, book_name varchar(255) DEFAULT NULL,author varchar(255) DEFAULT NULL,grade varchar(255

45、) DEFAULT NULL,count varchar(255) DEFAULT NULL, introduction varchar(255) DEFAULT NULL) ENGINE=InnoDB AUTO_INCREMENT=1409 DEFAULT CHARSET=utf8; mysql exit;退出數(shù)據(jù)庫。用Scrapy爬取豆瓣圖書保存到MySQL數(shù)據(jù)庫文件訓練步驟項目訓練 設(shè)置pipelines.py文件【cd /home/scrapy/douban/douban】【vim pipelines.py】編輯pipelines.py文件,導入MySQLdb數(shù)據(jù)庫,配置數(shù)據(jù)庫相關(guān)的信

46、息,代碼如下:import MySQLdbclass DoubanPipeline(object): def _init_(self): #參數(shù)依次是:服務器主機名、用戶名、密碼、數(shù)據(jù)庫、編碼類型self.db = MySQLdb.connect(localhost,root, , douban,charset=utf8) self.cursor = self.db.cursor() def process_item(self, item, spider): book_name = item.get(book_name,N/A) author = item.get(author,N/A) gr

47、ade = item.get(grade,N/A) count = item.get(count,N/A) introduction = item.get(introduction,N/A) sql = insert into doubanread(book_name,author,class_,grade,count,introduction) values(%s,%s,%s,%s,%s,%s) self.cursor.execute(sql,(book_name,author,class_,grade,count,introduction) mit() def colse_spider(self,spider):

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論