《網(wǎng)絡爬蟲項目實踐》課件-項目四:分布式爬蟲_第1頁
《網(wǎng)絡爬蟲項目實踐》課件-項目四:分布式爬蟲_第2頁
《網(wǎng)絡爬蟲項目實踐》課件-項目四:分布式爬蟲_第3頁
《網(wǎng)絡爬蟲項目實踐》課件-項目四:分布式爬蟲_第4頁
《網(wǎng)絡爬蟲項目實踐》課件-項目四:分布式爬蟲_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

網(wǎng)絡爬蟲項目實戰(zhàn)項目四:分布式爬蟲主講人:xxx231任務4.2糗事百科段子爬取任務4.1環(huán)境搭建任務4.3鏈家網(wǎng)內(nèi)容爬取目錄任務4.1環(huán)境搭建任務描述1、使用三臺機器,一臺是Windows10,兩臺是Centos7,分別在兩臺機器上部署scrapy來進行分布式抓取一個網(wǎng)站。2、Windows的IP地址為本機IP(用于遠程連接Redis),用來作為Redis的Master端,CentOS的機器作為Slave。3、Master的爬蟲運行時會把提取到的URL封裝成Request放到Redis中的數(shù)據(jù)庫:“dmoz:requests”,并且從該數(shù)據(jù)庫中提取Request后下載網(wǎng)頁,再把網(wǎng)頁的內(nèi)容存放到Redis的另一個數(shù)據(jù)庫中“dmoz:items"。4、Slave從Master的Redis中取出待抓取的Request,下載完網(wǎng)頁之后就把網(wǎng)頁的內(nèi)容發(fā)送回Master的Redis5、重復上面的3和4,直到Master的Redis中的“dmoz:requests”數(shù)據(jù)庫為空,再把Master的Redis中的“dmoz:items"數(shù)據(jù)庫寫入到MongoDB中6、Master里的Reids還有一個數(shù)據(jù)“dmoz:dupefilter”是用來存儲抓取過的url的指紋(使用哈希函數(shù)將Url運算后的結(jié)果),是防止重復抓取的。掌握VMWare虛擬機的安裝方法掌握在CentOS的安裝和配置方法掌握在CentOS上安裝Python的方法掌握在CentOS中安裝部署scrapy方法掌握在CentOS中安裝部署scrapy-redis方法掌握克隆虛擬機的方法掌握在Windows中安裝Redis數(shù)據(jù)庫的方法任務目標1安裝VMWare虛擬機(1)官網(wǎng)下載地址:/en/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0(2)進入官網(wǎng)下載界面,如圖4-1所示,選擇合適的版本下載。任務實施1安裝VMWare虛擬機2、雙擊安裝程序進入安裝向?qū)?,點擊“下一步”。任務實施1安裝VMWare虛擬機3、選擇許可協(xié)議:勾選“我接收許可協(xié)議中的條款”,點擊“下一步”任務實施1安裝VMWare虛擬機4、設置安裝位置任務實施1安裝VMWare虛擬機任務實施1安裝VMWare虛擬機任務實施1安裝VMWare虛擬機任務實施1安裝VMWare虛擬機任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施2

Linux安裝任務實施3虛擬機網(wǎng)絡設置任務實施1、修改為靜態(tài)IP:使用root用戶登錄Master虛擬機,修改Master的IP地址為靜態(tài)IP。(1)進入網(wǎng)絡配置文件,命令如下:[root@localhost~]#vim/etc/sysconfig/network-scripts/ifcfg-ens33(2)將虛擬機IP設置為靜態(tài)IP,具體需要設置選項如圖4-48所示3虛擬機網(wǎng)絡設置任務實施2、修改Linux的服務器名:(1)進入Linux的服務器名配置文件,命令如下:[root@localhost~]#vim/etc/sysconfig/network(2)將Linux的服務器名設置為“Master”,具體需要設置選項如圖4-50所示:3虛擬機網(wǎng)絡設置任務實施3、修改主機名(1)進入主機名配置文件,命令如下:[root@localhost~]#vim/etc/hostname(2)將主機名設置為“Master”,具體需要設置選項如圖4-51所示:3虛擬機網(wǎng)絡設置任務實施重啟虛擬機,

5、重啟后,使用Xshell連接Master虛擬機,點擊【文件】->【新建(N)】,彈出的界面如圖4-52所示。在“名稱”中填入“Master”,“主機”中填入虛擬機IP地址“37”,然后點擊【連接】。3虛擬機網(wǎng)絡設置任務實施4安裝Python任務實施1、下載Python(1)下載地址:/downloads/source/(2)選擇相應的版本下載,本任務選擇Python3.6.8,如圖4-55所示。4安裝Python任務實施2、在CentOS中解壓(1)在CentOS中的opt目錄下面新建software和module兩個文件夾,具體目錄如下:[root@Master~]#mkdir/opt/software[root@Master~]#mkdir/opt/module(2)將上一步下載好的Python安裝包上傳到CentOS系統(tǒng)的/opt/software目錄下,打開XFTP工具,進入/opt/software目錄,然后將安裝包拖入即可,如圖4-56所示。4安裝Python任務實施(3)將壓縮包解壓到/opt/module中,具體命令如下:[root@Mastersoftware]#tar-zxvfPython-3.6.8.tgz3、安裝編譯環(huán)境Python的安裝需要GCC編譯器,GCC有些系統(tǒng)版本已經(jīng)默認安裝,通過“gcc--version”查看,如果沒安裝的先安裝GCC,可以通過如下命令安裝:[root@Mastersoftware]#yum-yinstallgcc4、安裝依賴包(1)安裝zlib,具體安裝命令如下:[root@Mastersoftware]#yum-yinstallzlib*4安裝Python任務實施(2)安裝openssl,具體安裝命令如下:[root@Mastersoftware]#yum-yinstallopenssl*5、安裝Python(1)編譯Python,具體命令如下:[root@MasterPython-3.6.8]#./configure--prefix=/opt/module/python-3.6.8--enable-optimizations(2)安裝Python,具體命令如下:[root@MasterPython-3.6.8]#makeinstall4安裝Python任務實施6、配置環(huán)境變量(1)打開/etc/profile文件[root@Masterpython-3.6.8]#vim/etc/profile(2)在profile文件末尾添加Python的路徑,配置如下代碼:#PythonHomeexportPYTHON_HOME=/opt/module/python-3.6.8exportPATH=$PATH:PYTHON_HOME/bin(3)讓修改后的文件生效[root@Masterpython-3.6.8]#source/etc/profile4安裝Python任務實施7、建立軟連接[root@Master~]#ln-s/opt/module/python-3.6.8/bin/python3.6/usr/bin/python[root@Master~]#ln-s/opt/module/python-3.6.8/bin/pip3.6/usr/bin/pip8、測試是否安裝成功,直接輸入命令“python”,如果出現(xiàn)如圖4-57所示界面,則表示Python安裝成功。[root@Master~]#python5安裝分布式框架任務實施1、安裝scrapy:輸入如下命令,當出現(xiàn)如圖4-58所示界面則表示安裝成功。[root@Mastermodule]#pipinstallscrapy2、建立scrapy的軟連接,具體代碼如下:[root@Slave02bin]#ln-s/opt/module/python-3.6.8/bin/scrapy/usr/bin/scrapy5安裝分布式框架任務實施3、安裝scrapy-redis:輸入如下命令,當出現(xiàn)如圖4-59所示界面則表示安裝成功。[root@Mastermodule]#pipinstallscrapy-redis6克隆虛擬機任務實施1、選中需要克隆的虛擬機,點擊鼠標右鍵,彈出如圖4-60所示對話框,點擊【管理(M)】->【克隆(C)】,然后會彈出如圖4-61所示的“克隆虛擬機向?qū)А表撁妗?克隆虛擬機任務實施6克隆虛擬機任務實施6克隆虛擬機任務實施6、然后重復以上步驟,克隆另外一臺虛擬機,并命名為Slave02。7、兩臺虛擬機克隆完畢后,啟動虛擬機,然后對虛擬機進行網(wǎng)絡設置,具體參見1.3節(jié),其中Slave01的IP地址設置為38,Slave02的IP地址設置為39。7安裝Redis數(shù)據(jù)庫任務實施1、下載Redis數(shù)據(jù)庫(1)Windows版下載地址:/microsoftarchive/redis/releases(2)選擇合適版本,本任務選擇3.2.100版,如圖4-66所示。7安裝Redis數(shù)據(jù)庫任務實施2、點擊如圖4-66所示“3.2.100”鏈接,進入版本選擇界面,選擇擴展名為“msi”的安裝版,如圖4-67所示。7安裝Redis數(shù)據(jù)庫任務實施3、安裝:雙擊安裝包,進入如圖4-68所示的安裝向?qū)Вc擊【Next】。7安裝Redis數(shù)據(jù)庫任務實施7安裝Redis數(shù)據(jù)庫任務實施7安裝Redis數(shù)據(jù)庫任務實施7安裝Redis數(shù)據(jù)庫任務實施9、安裝可視化界面(1)本文連接Redis數(shù)據(jù)庫的工具選擇redis-desktop-manager。(2)下載地址:https://rdm.dev/pricing(3)安裝:雙擊安裝包,進入如圖4-74所示的安裝向?qū)Вc擊【Next】。7安裝Redis數(shù)據(jù)庫任務實施7安裝Redis數(shù)據(jù)庫任務實施7安裝Redis數(shù)據(jù)庫任務實施(7)進入Redis的安裝目錄,找到如圖4-78所示的“redis.windows.conf”和“redis.windows-service”兩個文件,對這兩個文件中的“bin”注釋掉,“protected-mode”設置為no,如圖4-79所示。7安裝Redis數(shù)據(jù)庫任務實施10、連接Redis(1)打開redis-desktop-manager,點擊如圖4-80所示的“連接到Redis服務器”按鈕,會彈出如圖4-81對話框。任務4.2糗事百科段子爬取任務描述本任務將以某事百科為例,使用Scrapy-Redis分布式框架對某事百科中的段子進行爬取,主要獲取段子的作者和內(nèi)容,某事百科段子欄目如圖4-82所示。通過本任務的學習,使讀者掌握Scrapy-Redis分布式框架的基本使用方法。使用RedisCrawlSpider方式爬取糗事百科中的段子爬取段子的正文和作者掌握將普通項目修改為分布式項目掌握分布式爬蟲的運行方式任務目標1創(chuàng)建Scrapy項目首先進入cmd命令窗口,然后進入本地磁盤中的項目保存目錄(該目錄自己選定),如圖4-83所示:任務實施1創(chuàng)建Scrapy項目然后使用scrapy命令新建項目名為“duanzi”的項目,命令如下:任務實施scrapystartprojectduanzi此時在項目保存目錄多了一個項目名為“duanzi”的項目,如圖4-84所示。1創(chuàng)建Scrapy項目cd進入“duanzi”項目目錄,并基于“crawl模板”創(chuàng)建爬蟲文件,命令如下:任務實施scrapygenspider-tcrawlqiushi可以看到在項目根目錄的“duanzi”目錄下面的“spiders”創(chuàng)建了名為“qiushi”的爬蟲文件,如圖4-85所示:1創(chuàng)建Scrapy項目創(chuàng)建好爬蟲項目后,用PyCharm打開,然后進入到配置文件“settings.py”中,選擇不遵守Robot協(xié)議:任務實施#君子協(xié)議不遵守ROBOTSTXT_OBEY=False然后,設置瀏覽器配置,該配置可以選擇自己瀏覽器的配置具體配置如下:#瀏覽器的配置USER_AGENT='Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.190Safari/537.36'2爬取網(wǎng)頁數(shù)據(jù)觀察該頁面,可以看出要想進入糗事百科的正文,則需要獲取正文的鏈接。通過檢查,可以定位段子在“span”元素中,如圖4-86所示,而段子的鏈接則是以“/article”開頭的任務實施2爬取網(wǎng)頁數(shù)據(jù)除了進入段子正文的鏈接外,還需要的是翻頁鏈接,通過檢查,可以定位翻頁按鈕的鏈接,如圖4-87所示,翻頁鏈接是以“/article”開頭的。任務實施2爬取網(wǎng)頁數(shù)據(jù)采用CrawlSpider類爬取數(shù)據(jù),LinkExtractors鏈接提取器需要填入上面兩個鏈接,在項目的“spiders”目錄下的qiushi.py文件中的“rules”中填入如下代碼:任務實施rules=(Rule(LinkExtractor(allow=r'/article/\d+'),callback='parse_item',follow=True),Rule(LinkExtractor(allow=r'/text/page/\d+/'),callback='parse_item',follow=True),)2爬取網(wǎng)頁數(shù)據(jù)獲取內(nèi)容的XPath表達式,如圖4-88所示,通過驗證,表達式“//*[@id="single-next-link"]/div”可以獲取段子內(nèi)容任務實施2爬取網(wǎng)頁數(shù)據(jù)用同樣的方式可以獲取段子作者的XPath表達式為:“//*[@id="articleSideLeft"]/a/div/span[@class="side-user-name"]”有了XPath表達式,接下來在項目的“spiders”目錄下的qiushi.py文件中添加如下代碼:任務實施defparse_item(self,response):content=response.xpath('//*[@id="single-next-link"]/div').extract_first().strip()name=response.xpath('//*[@id="articleSideLeft"]/a/div/span[@class="side-user-name"]').extract_first().strip()yield{"name":name,"content":content}2爬取網(wǎng)頁數(shù)據(jù)在項目跟目錄下面新建“start.py”,然后輸入下來代碼:任務實施fromscrapy.cmdlineimportexecuteexecute("scrapycrawlqiushi".split())運行“start.py”文件,可以看到控制臺在不斷爬取數(shù)據(jù),如圖4-89所示,則表示程序運行成功3分布式爬取上一步已經(jīng)成功運行程序,但是該程序是普通的Scrapy爬蟲項目,接下來將普通的Scrapy爬蟲項目改為Scrapy-Redis分布式爬蟲項目,并在CentOS上運行。1、在“settings.py”文件中,添加如下代碼:任務實施DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"SCHEDULER="scrapy_redis.scheduler.Scheduler"SCHEDULER_PERSIST=True#SCHEDULER_QUEUE_CLASS="scrapy_redis.queue.SpiderPriorityQueue"#SCHEDULER_QUEUE_CLASS="scrapy_redis.queue.SpiderQueue"#SCHEDULER_QUEUE_CLASS="scrapy_redis.queue.SpiderStack"ITEM_PIPELINES={'scrapy_redis.pipelines.RedisPipeline':400,}3分布式爬取2、在“settings.py”文件中添加Redis數(shù)據(jù)庫鏈接的IP地址和端口號。任務實施REDIS_HOST='18'REDIS_PORT=63793、將“settings.py”文件中的“DOWNLOAD_DELAY”注釋去掉,然后將數(shù)值改為“1”,如圖4-90所示。3分布式爬取4、對“qiushi.py”文件的代碼進行如圖4-91所示修改。任務實施3分布式爬取5、將項目文件“duanzi”上傳到Slave01和Slave02的“/opt/module”目錄中。任務實施3分布式爬取6、分別進入兩臺虛擬機項目的/duanzi/duanzi/spiders目錄,然后運行qiushi.py文件,具體代碼如下:任務實施[root@Slave02module]#cdduanzi/duanzi/spiders/[root@Slave02spiders]#scrapyrunspiderqiushi.py7、執(zhí)行完上面命令后,會發(fā)現(xiàn)程序是處于監(jiān)聽狀態(tài),如圖4-93所示,因為此時Redis數(shù)據(jù)庫中并沒有存入需要爬取網(wǎng)站的鏈接。3分布式爬取8、然后打開redis-desktop-manager軟件,在命令行中輸入如下命令:任務實施LPUSHqiushi:start_urls/text/9、輸入完命令后,Redis數(shù)據(jù)庫就會存在對應的URL。在本任務的基礎上,爬取段子的“糗友神評”,段子的評論如圖4-96所示課后練習任務4.3鏈家網(wǎng)內(nèi)容爬取任務描述本任務將以鏈家二手房交易信息爬取為例,講述Scrapy-Redis分布式框架的其他用法,主要獲取房子的總價、單價和小區(qū)等信息,鏈家佛山二手房房源信息如圖4-97所示。通過本任務的學習,使讀者掌握Scrapy-Redis分布式框架的常見使用方法。。使用分布式爬蟲爬取佛山鏈家的房屋信息爬取將爬取結(jié)果保存到MongoDB掌握將普通項目修改為分布式項目的兩種方式掌握分布式爬蟲的兩種運行方式任務目標1創(chuàng)建Scrapy項目首先進入cmd命令窗口,然后進入本地磁盤中的項目保存目錄(該目錄自己選定),如圖4-98所示:任務實施1創(chuàng)建Scrapy項目然后使用scrapy命令新建項目名為“room”的項目,命令如下:任務實施scrapystartprojectroom此時在項目保存目錄多了一個項目名為“room”的項目,如圖4-99所示。1創(chuàng)建Scrapy項目cd進入“room”項目目錄,并基于“basic模板”創(chuàng)建爬蟲文件,命令如下:任務實施scrapygenspider-tbasiclianjia可以看到在項目根目錄的“l(fā)ianjia”目錄下面的“spiders”創(chuàng)建了名為“l(fā)ianjia”的爬蟲文件,如圖4-100所示:1創(chuàng)建Scrapy項目創(chuàng)建好爬蟲項目后,用PyCharm打開,然后進入到配置文件“settings.py”中,選擇不遵守Robot協(xié)議:任務實施#君子協(xié)議不遵守ROBOTSTXT_OBEY=False然后,設置瀏覽器配置,該配置可以選擇自己瀏覽器的配置具體配置如下:#瀏覽器的配置USER_AGENT='Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.190Safari/537.36'2爬取網(wǎng)頁數(shù)據(jù)1、獲取翻頁鏈接任務實施start_urls=['/ershoufang/pg{}/'.format(num)fornuminrange(1,10)]在字符拼接的方式設置“l(fā)ianjia.py”文件中的“start_urls”,具體代碼如下:2爬取網(wǎng)頁數(shù)據(jù)2、獲取詳情頁鏈接任務實施將鼠標放在“a”標簽上,點擊右鍵在“Copy”->“CopyXPath”可以獲取該標簽的XPath表達式,所有詳情頁的XPath表達式為“//div[@class="infoclear"]/div[@class="title"]/a/@href”2爬取網(wǎng)頁數(shù)據(jù)然后在“l(fā)ianjia.py”文件中的添加如下代碼:任務實施defparse(self,response):urls=response.xpath('//div[@class="infoclear"]/div[@class="title"]/a/@href').extract()forurlinurls:yieldscrapy.Request(url,callback=self.parse_info)2爬取網(wǎng)頁數(shù)據(jù)3、獲取房屋詳細信息(1)獲取價格信息任務實施concat(//span[@class="total"]/text(),//span[@class="unit"]/span/text())XPath中的“concat”函數(shù)可以連接兩個或更多字符串并返回結(jié)果字符串。因此獲得價格的XPath表達式如下:2爬取網(wǎng)頁數(shù)據(jù)(2)獲取單價任務實施string(//span[@class="unitPriceValue"])如圖4-105所示,房屋單價是分為兩部分的,一部分是數(shù)字“9738”,一部分是單位“元/平米”。使用XPath表達式“//span[@class="unitPriceValue"]”可以過去單價,但是這樣獲取的單價是包含多余信息的,而我們需要的僅僅是文本數(shù)據(jù),所以可以使用XPath的“string()”函數(shù),具體XPath表達式如下:3數(shù)據(jù)存儲1、測試在項目的根目錄中新建“start.py”文件,在文件中輸入如下代碼:任務實施fromscrapy.cmdlineimportexecuteexecute('scrapycrawllianjia'.split())運行“start.py”文件,如果在控制臺出現(xiàn)如圖4-106所示的房屋信息,則表示程序運行成功3數(shù)據(jù)存儲2、存儲到MongoDB(1)將爬蟲結(jié)果存儲到數(shù)據(jù)庫,首先需要將數(shù)據(jù)交給pipelines處理,在“l(fā)ianjie.py”文件的“parse_info”方法中添加如下代碼任務實施yield{"total":total,"unitPriceValue":unitPriceValue,"xiao_qu":xiao_qu,"qu_yu":qu_yu,"hu_xing":hu_xing,"lou_ceng":lou_ceng,"mian_ji":mian_ji,"zhuang_xiu":zhuang_xiu,"taonei_mianji":taonei_mianji,"chan_quan":chan_quan,"yong_tu":yong_tu,"nian_xian":nian_xian,"di_ya":di_ya}3數(shù)據(jù)存儲(2)在pipelines.py中編寫如下代碼:任務實施importpymongofrompymysqlimportconnectclassMongoPipeline(object):defopen_spider(self,spider):self.client=pymongo.MongoClient()defprocess_item(self,item,spider):self.client.room.lianjia.insert(item)returnitemdefclose_spider(self,spider):self.client.close()3數(shù)據(jù)存儲(3)在“settings.py”中開啟pipelines功能,具體代碼如下:任務實施ITEM_PIPELINES={'room.pipelines.MongoPipeline':300,}3數(shù)據(jù)存儲3、運行程序運行“start.py”文件,如果在MongoDB的數(shù)據(jù)庫中出現(xiàn)如圖4-107所示的房屋信息,則表示數(shù)據(jù)成功保存到數(shù)據(jù)庫中。任務實施4分布式爬取1、方法一(1)在“settings.py”文件中添加如下代碼:任務實施DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"SCHEDULER="scrapy_redis.scheduler.Scheduler"SCHEDULER_PERSIST=True#SCHEDULER_QUEUE_CLASS="scrapy_redis.queue.SpiderPriorityQueue"#SCHEDULER_QUEUE_CLASS="scrapy_redis.queue.SpiderQueue"#SCHEDULER_QUEUE_CLASS="scrapy_redis.queue.SpiderStack"ITEM_PIPELINES={'scrapy_redis.pipelines.RedisPipeline':400}4分布式爬?。?)在“setti

溫馨提示

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

評論

0/150

提交評論