《Python網(wǎng)絡(luò)爬蟲技術(shù)(第2版)(微課版)》課件 項目6、7 終端協(xié)議分析 爬取某音樂PC客戶端和App客戶端數(shù)據(jù)、使用Scrapy爬蟲 爬取某企業(yè)官網(wǎng)新聞動態(tài)_第1頁
《Python網(wǎng)絡(luò)爬蟲技術(shù)(第2版)(微課版)》課件 項目6、7 終端協(xié)議分析 爬取某音樂PC客戶端和App客戶端數(shù)據(jù)、使用Scrapy爬蟲 爬取某企業(yè)官網(wǎng)新聞動態(tài)_第2頁
《Python網(wǎng)絡(luò)爬蟲技術(shù)(第2版)(微課版)》課件 項目6、7 終端協(xié)議分析 爬取某音樂PC客戶端和App客戶端數(shù)據(jù)、使用Scrapy爬蟲 爬取某企業(yè)官網(wǎng)新聞動態(tài)_第3頁
《Python網(wǎng)絡(luò)爬蟲技術(shù)(第2版)(微課版)》課件 項目6、7 終端協(xié)議分析 爬取某音樂PC客戶端和App客戶端數(shù)據(jù)、使用Scrapy爬蟲 爬取某企業(yè)官網(wǎng)新聞動態(tài)_第4頁
《Python網(wǎng)絡(luò)爬蟲技術(shù)(第2版)(微課版)》課件 項目6、7 終端協(xié)議分析 爬取某音樂PC客戶端和App客戶端數(shù)據(jù)、使用Scrapy爬蟲 爬取某企業(yè)官網(wǎng)新聞動態(tài)_第5頁
已閱讀5頁,還剩85頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

終端協(xié)議分析——爬取

某音樂PC客戶端和

App客戶端數(shù)據(jù)1分析App客戶端抓包目錄分析PC客戶端抓包2終端協(xié)議是網(wǎng)絡(luò)上設(shè)備之間通信規(guī)則的集合,通過終端協(xié)議可以獲取PC客戶端和App客戶端數(shù)據(jù)。常用的PC客戶端抓包工具有Wireshark、HTTPAnalyzer等。Wireshark適合幾乎所有網(wǎng)絡(luò)協(xié)議的分析,功能強大,但相對臃腫。HTTPAnalyzer則更專注于對HTTP/HTTPS數(shù)據(jù)流的分析,還提供了針對某個進(jìn)程進(jìn)行抓包的功能。本任務(wù)使用HTTPAnalyzer工具實現(xiàn)酷我音樂PC客戶端分析。任務(wù)描述使用Chrome開發(fā)者工具,查找表單數(shù)據(jù)的提交入口。使用Chrome開發(fā)者工具,查找需要提交的表單數(shù)據(jù)。獲取驗證碼圖片,進(jìn)行人工識別驗證碼。使用POST請求方法登錄。任務(wù)分析了解HTTPAnalyzer工具HTTPAnalyzer工具是一款實時分析HTTP/HTTPS數(shù)據(jù)流的工具,可以實時捕捉HTTP/HTTPS數(shù)據(jù)。其包含許多信息,如文件頭、HTML內(nèi)容、Cookie、查詢字符串、提交的數(shù)據(jù)、重定向的URL等;還可以提供緩沖區(qū)信息、清理對話內(nèi)容、HTTP狀態(tài)信息和其他過濾選項。HTTPAnalyzer工具還是一款可用于分析、調(diào)試和診斷的開發(fā)工具,它可以集成在瀏覽器中爬取HTML信息,也可安裝為單獨的應(yīng)用程序。注意:本項目使用的是HTTPAnalyzerV7.6。了解HTTPAnalyzer工具HTTPAnalyzer工具的主界面如圖所示。單擊主界面左上方的“開始”按鈕,即可開始記錄當(dāng)前處于會話狀態(tài)的所有應(yīng)用程序的HTTP流量信息。如果當(dāng)前沒有正在進(jìn)行網(wǎng)絡(luò)會話的應(yīng)用程序,那么可以在單擊“開始”按鈕后,使用瀏覽器打開任意一個網(wǎng)頁,即可看到相應(yīng)的HTTP流量信息。了解HTTPAnalyzer工具如果當(dāng)前有應(yīng)用程序正在進(jìn)行網(wǎng)絡(luò)會話,那么可看到中間的窗口部分會顯示一條或多條詳細(xì)的HTTP流量信息,如圖所示。單擊該圖中任意HTTP連接,即可查看該連接所對應(yīng)的詳細(xì)信息,捕獲到的HTTP連接信息顯示在中間的窗口中,每個窗口顯示的具體信息如下頁。了解HTTPAnalyzer工具窗口1顯示了所有的HTTP連接的流量信息,并可以根據(jù)進(jìn)程和時間進(jìn)行歸類排序。窗口2以選項卡的形式顯示了選中的HTTP連接的詳細(xì)信息,包括Request-Line、Host、Connection、Accept、User-Agent等。窗口3顯示了當(dāng)前連接所屬進(jìn)程的相關(guān)信息。了解HTTPAnalyzer工具單擊“進(jìn)程”下拉框,可以根據(jù)進(jìn)程來過濾數(shù)據(jù),如左圖所示。以text/html為過濾條件,單擊“類型”下拉框,選擇“text/html”選項,如右圖所示,即可通過數(shù)據(jù)類型進(jìn)行過濾,以得到想要的結(jié)果。爬取酷我音樂PC客戶端數(shù)據(jù)使用HTTPAnalyzer工具分別獲取酷我音樂PC客戶端中歌手的個人信息、熱門歌曲、專輯信息及熱門評論等數(shù)據(jù),具體步驟如下。(1)打開酷我音樂PC客戶端。(2)啟動HTTPAnalyzer,選擇僅顯示酷我音樂PC客戶端信息的進(jìn)程,在酷我音樂PC客戶端中的搜索框搜索某歌手,可以看到如圖所示的抓包效果。爬取酷我音樂PC客戶端數(shù)據(jù)針對圖所示的抓包效果,主要關(guān)注搜索請求的類型和響應(yīng),可以發(fā)現(xiàn),該搜索使用的是GET請求。選擇相關(guān)請求鏈接后,“查詢字符串”結(jié)果如左圖所示,“響應(yīng)內(nèi)容”結(jié)果如右圖所示。爬取酷我音樂PC客戶端數(shù)據(jù)由圖可以看出,響應(yīng)內(nèi)容是JSON格式的數(shù)據(jù),可以使用項目3介紹的BeautifulSoup庫對它進(jìn)行解析和數(shù)據(jù)提取。同時,在數(shù)據(jù)中可發(fā)現(xiàn)歌手的個人信息、熱門歌曲、專輯信息等內(nèi)容。爬取酷我音樂PC客戶端數(shù)據(jù)到此,已介紹完使用HTTPAnalyzer工具分析PC客戶端的操作流程,用戶可以根據(jù)這種方式分析出某音樂客戶端的所有信息接口,然后啟動爬蟲并發(fā)送請求進(jìn)行解析。但本小節(jié)所介紹的分析內(nèi)容比較簡單,如果客戶端的請求鏈接是加密的,那么分析難度將會上升。例如,網(wǎng)易云音樂的請求鏈接是加密的,利用HTTPAnalyzer工具無法爬取指定的內(nèi)容和結(jié)果。因此,用戶需要轉(zhuǎn)換思路,利用其他工具進(jìn)行分析。1分析App客戶端抓包目錄分析PC客戶端抓包2大多數(shù)爬蟲的對象都是PC網(wǎng)頁,但隨著App客戶端應(yīng)用數(shù)量的增多,相應(yīng)的爬取需求也越來越多,因此App客戶端的數(shù)據(jù)爬取對于一名爬蟲開發(fā)者來說是一項常用的技能。本任務(wù)以Android系統(tǒng)的手機App客戶端為例,介紹在PC端使用Fiddler工具對酷我音樂App客戶端進(jìn)行抓包,并爬取酷我音樂App客戶端圖片的方法與流程。任務(wù)描述了解并設(shè)置Fiddler工具。通過Fiddler工具得到酷我音樂App客戶端的JSON格式數(shù)據(jù)。利用Fiddler工具抓取的包,對酷我音樂App客戶端的圖片信息進(jìn)行爬取。任務(wù)分析了解Fiddler工具Fiddler工具是位于客戶端和服務(wù)器端之間的HTTP代理,也是目前最常用的HTTP抓包工具之一。Fiddler工具能夠記錄客戶端和服務(wù)器端之間的所有HTTP請求,可以針對特定的HTTP請求分析請求數(shù)據(jù)、設(shè)置斷點、調(diào)試Web應(yīng)用、修改請求數(shù)據(jù)等,甚至可以修改服務(wù)器端返回的數(shù)據(jù),其功能非常強大,是Web應(yīng)用調(diào)試的利器。注意:本項目使用的是FiddlerClassic5.0。了解Fiddler工具設(shè)置Fiddler工具的具體步驟如下。打開Fiddler工具,單擊“Tools”按鈕并選擇“Options”選項,如圖所示。1.設(shè)置Fiddler工具了解Fiddler工具勾選“DecryptHTTPStraffic”復(fù)選框,F(xiàn)iddler即可截獲HTTPS請求,如圖所示。了解Fiddler工具切換至“Connections”選項卡,勾選“Allowremotecomputerstoconnect”復(fù)選框,表示允許別的遠(yuǎn)程設(shè)備將HTTP/HTTPS請求發(fā)送到Fiddler,如圖所示。此處默認(rèn)的端口號(即圖中的“Fiddlerlistensonport”)為“8888”。注意:端口號可以根據(jù)需求更改,但不能與已使用的端口號沖突。重啟Fiddler,即可完成設(shè)置。了解Fiddler工具使用Fiddler工具實現(xiàn)手機抓包,需要確保手機和計算機的網(wǎng)絡(luò)在同一個局域網(wǎng)內(nèi),最簡便的方法是讓計算機和手機同時連接同一個路由器,由路由器分配設(shè)備的IP地址。在命令提示符窗口中通過“ipconfig”命令查看計算機的IP地址,找到“無線局域網(wǎng)適配器WLAN”的“IPv4地址”并記錄,如圖所示。2.設(shè)置Android系統(tǒng)的手機了解Fiddler工具成功獲取計算機的IP地址和端口號后,在Android系統(tǒng)手機的Wi-Fi設(shè)置中,找到手機連接路由器的Wi-Fi,修改網(wǎng)絡(luò),即可對手機進(jìn)行代理設(shè)置。將“代理”設(shè)置為“手動”,填入獲取到的計算機IP地址和端口號,點擊“保存”按鈕,如圖所示。了解Fiddler工具在Android系統(tǒng)手機的瀏覽器中打開無線局域網(wǎng)IPv4網(wǎng)址的8888端口(本小節(jié)設(shè)置的安裝證書網(wǎng)頁為“2:8888”)在網(wǎng)頁中單擊“FiddlerRootcertificate”證書的安裝證書即可,如圖所示。了解Fiddler工具設(shè)置完成Fiddler工具和Android系統(tǒng)的手機后,可用手機瀏覽器測試抓包百度首頁。通過手機瀏覽器打開百度首頁,觀察Fiddler工具左側(cè)欄的“Host”中是否含有百度的信息,若含有百度的信息,則說明手機成功連接上Fiddler工具,如圖所示。3.利用Fiddler工具進(jìn)行抓包測試分析酷我音樂App客戶端打開酷我音樂App客戶端首頁,如圖所示。分析酷我音樂App客戶端在Fiddler工具的左側(cè)欄找到酷我音樂App客戶端的信息,F(xiàn)iddler工具抓取到的每個數(shù)據(jù)包都會在該列表中展示,單擊具體的一個數(shù)據(jù)包后,可以在右側(cè)單擊“Inspectors”選項卡查看數(shù)據(jù)包的詳細(xì)內(nèi)容。Fiddler工具的右側(cè)主要分為請求信息(即客戶端發(fā)出的數(shù)據(jù))和響應(yīng)信息(服務(wù)器端返回的數(shù)據(jù))兩部分。在請求信息部分單擊“Raw”按鈕(顯示Headers和Body數(shù)據(jù)),在響應(yīng)信息部分單擊“JSON”按鈕(若請求數(shù)據(jù)或響應(yīng)數(shù)據(jù)是JSON格式,則以JSON格式顯示請求或響應(yīng)的內(nèi)容),結(jié)果如圖所示。分析酷我音樂App客戶端解析、爬取、存儲酷我音樂App客戶端首頁圖片。本項目介紹了如何爬取終端協(xié)議的數(shù)據(jù),分別講述了使用HTTPAnalyzer工具和Fiddler工具爬取PC客戶端和App客戶端的數(shù)據(jù)的方法,其內(nèi)容如下。以酷我音樂PC客戶端為例,介紹了HTTPAnalyzer工具的抓包過程。以酷我音樂App客戶端為例,介紹了Fiddler工具抓包的過程及如何爬取酷我音樂App客戶端首頁的圖片。小結(jié)使用Scrapy爬蟲——

爬取某企業(yè)官網(wǎng)新聞動態(tài)1通過Scrapy爬取文本信息目錄認(rèn)識Scrapy2定制中間件3Scrapy是一個為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)化數(shù)據(jù)而編寫的應(yīng)用程序框架,可以應(yīng)用在包括數(shù)據(jù)挖掘、信息處理或存儲歷史數(shù)據(jù)等一系列功能的程序中。該框架也可以應(yīng)用在獲取API(如AmazonAssociatesWebServices的API)所返回的數(shù)據(jù)或通用的網(wǎng)絡(luò)爬蟲中。在使用Scrapy框架之前,需要先了解該框架的構(gòu)成、常用命令。任務(wù)描述了解Scrapy爬蟲框架的構(gòu)成。了解Scrapy各組件的作用。熟悉常見的Scrapy命令。認(rèn)識ScrapyScrapy是一個爬蟲框架而非功能函數(shù)庫,簡單地說,它是一個半成品,可以幫助用戶簡單快速地部署一個專業(yè)的網(wǎng)絡(luò)爬蟲。Scrapy爬蟲框架主要由引擎(Engine)、調(diào)度器(Scheduler)、下載器(Downloader)、Spiders、ItemPipelines、下載器中間件(DownloaderMiddlewares)、Spider中間件(SpiderMiddlewares)這7個組件構(gòu)成。認(rèn)識Scrapy1.了解Scrapy爬蟲框架引擎:負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)所有組件中的流向,并能在不同的條件下觸發(fā)相對應(yīng)的事件。引擎組件相當(dāng)于爬蟲的“大腦”,是整個爬蟲的調(diào)度中心。調(diào)度器:從引擎接收請求并將該請求加入隊列,以便之后引擎需要時將它們提供給引擎。初始爬取的URL和后續(xù)在網(wǎng)頁中獲取的待爬取URL都將被放入調(diào)度器中,等待爬取,同時調(diào)度器會自動去除重復(fù)的URL。如果特定的URL不需要去重,那么可以通過設(shè)置實現(xiàn),如POST請求的URL。認(rèn)識Scrapy下載器:主要功能是獲取網(wǎng)頁內(nèi)容,并將其提供給引擎和Spiders。Spiders:是Scrapy用戶編寫的用于分析響應(yīng),并提取Items或額外跟進(jìn)的URL的一個類。每個Spider負(fù)責(zé)處理一個(或一些)特定網(wǎng)站。ItemPipelines:主要功能是處理被Spiders提取出來的Items。典型的處理有清理、驗證及持久化(如將Items存取到數(shù)據(jù)庫中)。當(dāng)網(wǎng)頁中被爬蟲解析的數(shù)據(jù)存入Items后,將被發(fā)送到ItemPipelines,經(jīng)過幾個特定的數(shù)據(jù)處理次序后,存入本地文件或數(shù)據(jù)庫。認(rèn)識Scrapy下載器中間件:是一組在引擎及下載器之間的特定鉤子(SpecificHook),主要功能是處理下載器傳遞給引擎的響應(yīng)(Response)。下載器中間件提供了一個簡便的機制,可通過插入自定義代碼來擴(kuò)展Scrapy的功能。通過設(shè)置下載器中間件可以實現(xiàn)爬蟲自動更換User-Agent、IP地址等功能。Spider中間件:是一組在引擎及Spiders之間的特定鉤子,主要功能是處理Spiders的輸入(響應(yīng))和輸出(Items及請求)。同時,Spider中間件提供了一個簡便的機制,可通過插入自定義代碼來擴(kuò)展Scrapy的功能。認(rèn)識ScrapyScrapy框架中各組件之間的數(shù)據(jù)流向如下圖所示認(rèn)識Scrapy數(shù)據(jù)流在Scrapy中由執(zhí)行引擎控制,其基本步驟如下:引擎打開一個網(wǎng)站,找到處理該網(wǎng)站的Spiders,并向該Spiders請求第一個要爬取的URL。引擎將爬取請求(Requests)轉(zhuǎn)發(fā)給調(diào)度器,調(diào)度器指揮進(jìn)行下一步。引擎從調(diào)度器獲取下一個要爬取的請求。調(diào)度器返回下一個要爬取的請求,通過下載器中間件(請求方向)將請求轉(zhuǎn)發(fā)給下載器。當(dāng)網(wǎng)頁下載完畢時,下載器會生成一個該網(wǎng)頁的響應(yīng),并將其通過下載器中間件(響應(yīng)方向)發(fā)送給引擎。引擎從下載器中接收到響應(yīng)并通過Spider中間件(輸入方向)發(fā)送給Spiders處理。Spiders處理響應(yīng)并返回爬取到的Items及(跟進(jìn))新的請求給引擎。引擎將爬取到的Items(Spiders返回的)給ItemPipelines,將請求(Spiders返回的)給調(diào)度器。重復(fù)步驟(2)直至調(diào)度器中沒有更多的URL請求,引擎關(guān)閉該網(wǎng)站。認(rèn)識ScrapyScrapy通過命令行進(jìn)行控制,Scrapy提供了多種命令,用于多種目的,并且每個命令都接收一組不同的參數(shù)和選項。認(rèn)識Scrapy2.熟悉Scrapy常用命令全局命令說明startproject創(chuàng)建Scrapy項目genspider基于預(yù)定義模板創(chuàng)建Scrapy爬蟲settings查看Scrapy的設(shè)置runspider運行一個獨立的爬蟲Python文件shell(以給定的URL)啟動Scrapyshellfetch使用Scrapy下載器下載給定的URL,并將內(nèi)容輸出到標(biāo)準(zhǔn)輸出流view以Scrapy爬蟲所“看到”的樣子在瀏覽器中打開給定的URLversion輸出Scrapy版本除了全局命令外,Scrapy還提供了專用于項目的項目命令。在使用Scrapy爬蟲框架的過程中,常用的命令主要是全局命令中的startproject、genspider、runspider,以及項目命令中的crawl、list。認(rèn)識Scrapy項目命令說明crawl啟動爬蟲check協(xié)議(contract)檢查list列出項目中所有可用的爬蟲edit使用EDITOR環(huán)境變量或設(shè)置中定義的編輯器編輯爬蟲parse獲取給定的URL并以爬蟲處理它的方式解析它bench運行benchmark(基準(zhǔn))測試1通過Scrapy爬取文本信息目錄認(rèn)識Scrapy2定制下載器中間件3使用Scrapy框架進(jìn)行網(wǎng)頁數(shù)據(jù)爬取的第一步就是啟動爬蟲,使用Scrapy提供的startproject命令即可創(chuàng)建一個爬蟲項目,其基本語法格式如下:通過Scrapy爬取文本信息1.創(chuàng)建Scrapy爬蟲項目scrapystartproject<project_name>[project_dir]創(chuàng)建Scrapy爬蟲項目的目錄創(chuàng)建的Scrapy爬蟲項目的名稱打開PyCharm,在“Terminal”(終端)運行“scrapystartprojectTipDMSpiderD:\項目7\code”命令,即可在目錄“D:\項目7\code”下,創(chuàng)建一個名為“TipDMSpider”的Scrapy爬蟲項目。創(chuàng)建完成后,在“D:\項目7\code”下即可生成一個名為TipDMSpider的文件夾和scrapy.cfg文件。通過Scrapy爬取文本信息需要用戶自定義的目錄與腳本文件的名稱、作用如下表。通過Scrapy爬取文本信息目錄或文件名稱作用spiders創(chuàng)建Scrapy項目后自動創(chuàng)建的一個文件夾,用于存放用戶編寫的爬蟲腳本items.py表示項目中的Items。在items腳本中定義了一個Item類,能夠保存爬取到的數(shù)據(jù)。使用方法和Python字典的使用方法類似,并且提供了額外保護(hù)機制來避免拼寫錯誤導(dǎo)致的未定義字段錯誤middlewares.py表示項目中的中間件。在middlewares腳本中,用戶可以根據(jù)需要自定義中間件,從而實現(xiàn)代理、User-Agent等的轉(zhuǎn)換pipelines.py表示項目中的Pipelines。在pipelines腳本中定義了一個pipelines類,主要用于對爬取數(shù)據(jù)的存儲,其可以根據(jù)需求將數(shù)據(jù)保存至數(shù)據(jù)庫、文件等settings.py表示項目的設(shè)置爬蟲的主要目標(biāo)是從網(wǎng)頁非結(jié)構(gòu)化的數(shù)據(jù)源中提取結(jié)構(gòu)化的數(shù)據(jù)。TipDMSpider項目最終的目標(biāo)是解析出文章的標(biāo)題(title)、時間(time)、正文(text)、瀏覽數(shù)(view_count)等數(shù)據(jù)。Scrapy提供了Item對象來完成將解析數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)的功能。通過Scrapy爬取文本信息2.修改items/pipelines腳本Item對象是一種簡單的容器,用于保存爬取到的數(shù)據(jù),它提供了類似于字典的API,以及用于聲明可用字段的簡單語法。Item可使用簡單定義語法及Field對象來聲明。新建的TipDMSpider項目中的items腳本模板如下,用于定義存儲數(shù)據(jù)的Item類,該類繼承于scrapy.Item。importscrapyclassTipdmspiderItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()pass通過Scrapy爬取文本信息根據(jù)TipDMSpider項目的目標(biāo),對items腳本進(jìn)行定制。TipdmspiderItem類如代碼所示。classTipdmspiderItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()title=scrapy.Field()text=scrapy.Field()time=scrapy.Field()view_count=scrapy.Field()通過Scrapy爬取文本信息Items將會流向ItemPipelines。ItemPipelines的作用是將獲取到的數(shù)據(jù)持久化,其主要內(nèi)容如下。清理爬取到的數(shù)據(jù)。驗證爬取數(shù)據(jù)的合法性,檢查Items是否包含某些字段。保存數(shù)據(jù)至文件或數(shù)據(jù)庫中。值得注意的是,每個ItemPipelines都是一個獨立的Python類,必須實現(xiàn)process_item()方法。每個ItemPipelines組件都需要調(diào)用process_item()方法,該方法必須返回一個Item對象,或拋出DropItem異常,被丟棄的Item將不會被之后的Pipelines組件所處理。通過Scrapy爬取文本信息在新建的TipDMSpider項目中,自動生成的Itempipelines腳本模板如下。fromitemadapterimportItemAdapterclassTipdmspiderPipeline:defprocess_item(self,item,spider):returnitem通過Scrapy爬取文本信息在pipelines腳本模板的process_item()方法中,除“self”參數(shù)外,還存在item和spider這兩個參數(shù),根據(jù)TipDMSpider項目的目標(biāo),對items腳本進(jìn)行定制。通過Scrapy爬取文本信息參數(shù)名稱說明self表示實例對象本身item接收Items。表示爬取對象的Items。無默認(rèn)值spider接收Spider。表示爬取該Items的Spider。無默認(rèn)值TipDMSpider項目提取的信息最終將存儲至CSV文件或數(shù)據(jù)庫中。使用pandas庫將Items中的數(shù)據(jù)轉(zhuǎn)換為DataFrame結(jié)構(gòu)會更方便處理。pandas庫的DataFrame類的基本語法格式如下:通過Scrapy爬取文本信息classpandas.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)DataFrame的數(shù)據(jù)列索引是否從輸入復(fù)制數(shù)據(jù)行索引強制轉(zhuǎn)換后的類型,僅支持單獨一種轉(zhuǎn)換Items中的數(shù)據(jù)轉(zhuǎn)換為DataFrame結(jié)構(gòu)后即可使用to_csv()方法輕松地將數(shù)據(jù)存儲至CSV文件中。to_csv()方法的基本語法格式如下:通過Scrapy爬取文本信息DataFrame.to_csv(path_or_buf=None,sep=',',na_rep=",columns=None,header=True,index=True,index_label=None,mode='w',encoding=None)文件路徑分隔符缺失值寫出的列名是否將列名寫出是否將行名(索引)寫出索引名數(shù)據(jù)寫入模式存儲文件的編碼格式還可以使用to_sql()方法將數(shù)據(jù)存儲至數(shù)據(jù)庫中。通過Scrapy爬取文本信息DataFrame.to_sql(name,con,schema=None,if_exists='fail',index=True,index_label=None,dtype=None)數(shù)據(jù)表名稱指定模式是否將行索引作為數(shù)據(jù)傳入數(shù)據(jù)庫數(shù)據(jù)庫連接是fail表示若表名存在,則不執(zhí)行寫入操作;replace表示若表名存在,則將原數(shù)據(jù)表刪除,再重新創(chuàng)建;append表示在原數(shù)據(jù)表的基礎(chǔ)上追加數(shù)據(jù)是否引用索引名稱寫入的數(shù)據(jù)類型需要注意的是,對數(shù)據(jù)庫進(jìn)行操作需要使用數(shù)據(jù)連接相關(guān)的工具,在項目3中已經(jīng)介紹了使用PyMySQL庫操作數(shù)據(jù)庫,但to_sql()方法需要配合sqlalchemy庫中的create_engine函數(shù)才能順利使用。create_engine函數(shù)可用于創(chuàng)建一個數(shù)據(jù)庫連接,其主要參數(shù)是一個連接字符串,MySQL和Oracle數(shù)據(jù)庫的連接字符串的格式如下。通過Scrapy爬取文本信息數(shù)據(jù)庫產(chǎn)品名+連接工具名://用戶名:密碼@數(shù)據(jù)庫IP地址:數(shù)據(jù)庫端口號/數(shù)據(jù)庫名稱?charset=數(shù)據(jù)庫數(shù)據(jù)編碼配合pandas庫,修改pipelines腳本。通過Scrapy爬取文本信息創(chuàng)建TipDMSpider項目后,爬蟲模塊的代碼都放置于spiders目錄中。創(chuàng)建之初,spiders目錄下僅有一個“__init__.py”文件,并無其他文件,對于初學(xué)者而言極有可能無從下手。使用genspider命令,可以解決這一問題,genspider命令的基本語法格式如下。通過Scrapy爬取文本信息3.編寫spider腳本scrapygenspider[-ttemplate]<name><domain>創(chuàng)建模板的類型爬蟲的域名稱創(chuàng)建的爬蟲名稱在PyCharm的“Terminal”中,使用“cdD:/項目7/code/TipDMSpider”命令進(jìn)入Scrapy爬蟲項目目錄后,再運行“scrapygenspidertipdm”命令即可創(chuàng)建一個spider腳本模板。spider腳本模板創(chuàng)建后,在spiders目錄下會生成一個tipdm腳本模板。通過Scrapy爬取文本信息在TipDMSpider項目目錄下運行crawl命令即可啟動爬蟲,crawl命令的基本語法格式如下。在PyCharm的“Terminal”中運行“scrapycrawltipdm”命令。通過Scrapy爬取文本信息scrapycrawl<spider>spider爬蟲的名稱,即腳本模板中的name變量值在tipdm腳本中,parse()方法負(fù)責(zé)解析返回的數(shù)據(jù)并提取數(shù)據(jù),以及生成需要進(jìn)一步處理的URL的Reponse對象。在此之前,需要根據(jù)爬取目標(biāo)設(shè)計網(wǎng)頁爬取的流程。本次爬取的目標(biāo)是網(wǎng)站“”中的“新聞中心”頁面中所有的信息。通過Scrapy爬取文本信息在TipdmSpider類的parse()方法中,其中一個參數(shù)是response,對傳入的響應(yīng)直接使用XPath和CSS方法即可根據(jù)對應(yīng)的規(guī)則解析網(wǎng)頁。要在TipDMSpider項目中使用XPath進(jìn)行網(wǎng)頁解析,首先需要分析摘要網(wǎng)頁URL的規(guī)律。通過Scrapy爬取文本信息通過規(guī)律能夠較快獲得所有的摘要網(wǎng)頁的URL,從圖所示的網(wǎng)頁源代碼可以看出,從第2頁開始,網(wǎng)頁的URL中發(fā)生改變的是index與html之間的網(wǎng)頁編號,例如,第2頁的網(wǎng)頁URL后面部分是index_2.jhtml,第3頁則是index_3.jhtml。故獲得總共的網(wǎng)頁數(shù)目,即可知道所有摘要網(wǎng)頁的網(wǎng)址。通過Scrapy爬取文本信息獲得“新聞中心”網(wǎng)頁數(shù)目所在的節(jié)點信息的XPath為“//*[@id="t505"]/div[6]/div/a[6]/text()”同時由于第1頁網(wǎng)址與其他頁網(wǎng)址規(guī)則不同,所以需要手動添加。通過Scrapy爬取文本信息由于parse()方法默認(rèn)響應(yīng)start_urls中的網(wǎng)址,同時不同網(wǎng)頁需要解析的內(nèi)容不同,所以后續(xù)的解析需要通過調(diào)用其他方法來實現(xiàn),代碼中的最后一行使用了Scrapy中http包下的Request類用于回調(diào)。Request類的基本語法格式如下:通過Scrapy爬取文本信息classscrapy.http.Request(url[,callback,method='GET',headers,body,cookies,meta,encoding='utf-8',priority=0,dont_filter=False,errback,flags])用于請求的網(wǎng)址用于回調(diào)的方法請求頭信息請求的方式請求的CookiesRequest.meta屬性的初始值Request類的回調(diào)方法的作用是獲取所有文章網(wǎng)頁網(wǎng)址,分析網(wǎng)頁源代碼可以獲取所有文章網(wǎng)頁網(wǎng)址的XPath,即“//*[@id=”t505“]/div/div[3]/h1/a/@href”。同時需要注意獲取的網(wǎng)頁網(wǎng)址并非一個完整的網(wǎng)址,還需要將每個網(wǎng)址補充完整。通過Scrapy爬取文本信息TipDMSpider項目的最終目標(biāo)是獲取文章的標(biāo)題、時間、正文、瀏覽數(shù),在獲取了文章的網(wǎng)址之后,對文章網(wǎng)頁進(jìn)行解析即可得到對應(yīng)的內(nèi)容。解析文章相關(guān)信息的XPath如下表所示。通過Scrapy爬取文本信息信息名稱XPath標(biāo)題(title)/html/body/div[2]/div/div[1]/div[2]/h1/text()時間(time)/html/body/div[2]/div/div[1]/div[2]/div/div[1]/span[1]/text()正文(text)//div[@class='artCon']//p/text()瀏覽數(shù)(view_count)/html/body/div[2]/div/div[1]/div[2]/div/div[1]/span[3]/text()如果正文存在分段的現(xiàn)象,那么在解析的過程中會將不同的段落放在同一個list中,為了保證存儲方便,需要將list中的信息進(jìn)行合并。同時,需要將所有解析出來的信息均存放至item中。通過Scrapy爬取文本信息ipDMSpider項目的spider腳本已基本編寫完成,但需要注意,由于在parse()、parse_url()兩個方法中調(diào)用了Request類,在parse_text()方法中調(diào)用了item,所以需要在創(chuàng)建的spider腳本最前端加入導(dǎo)入Request類和TipDMSpider項目構(gòu)建的Item類的代碼,完成添加后的spider腳本的所有導(dǎo)入函數(shù)與類的語句,如代碼所示。通過Scrapy爬取文本信息importscrapyfromscrapy.httpimportRequestfromTipDMSpider.itemsimportTipdmspiderItemScrapy設(shè)置允許自定義所有Scrapy組件,包括核心、擴(kuò)展、管道和爬蟲本身。設(shè)置的基礎(chǔ)結(jié)構(gòu)可提供鍵值映射的全局命名空間,代碼可以使用它,并從全局命名空間提取配置值。用戶可以通過不同的機制來填充設(shè)置,這些設(shè)置也是選擇當(dāng)前活動的Scrapy項目的機制之一。通過Scrapy爬取文本信息4.修改settings腳本在TipDMSpider項目的默認(rèn)settings腳本中共有25個設(shè)置。通過Scrapy爬取文本信息設(shè)置名稱說明BOT_NAME此Scrapy項目實施的bot的名稱(也稱為項目名稱)。用于在默認(rèn)情況下構(gòu)造User-Agent,也用于日志記錄。默認(rèn)為項目名稱SPIDER_MODULESScrapy將使用的Spiders列表。默認(rèn)為Spiders項目目錄,可存在多個目錄NEWSPIDER_MODULE新的Spider位置。默認(rèn)為Spiders項目目錄,僅接收strROBOTSTXT_OBEY是否遵守robots.txt協(xié)議。默認(rèn)為TrueCONCURRENT_REQUESTSScrapy下載程序執(zhí)行的并發(fā)(即同時)請求的最大數(shù)量。默認(rèn)為16DOWNLOAD_DELAY下載器在從同一網(wǎng)站下載連續(xù)網(wǎng)頁之前應(yīng)等待的時間,主要用于限制爬取的速度。默認(rèn)為3CONCURRENT_REQUESTS_PER_

DOMAIN任何單個域執(zhí)行的并發(fā)(同時)請求的最大數(shù)量。默認(rèn)為16(續(xù)上表)通過Scrapy爬取文本信息設(shè)置名稱說明CONCURRENT_REQUESTS_PER_IP單個IP地址執(zhí)行的并發(fā)(即同時)請求的最大數(shù)量。若非0,則忽略CONCURRENT_REQUESTS_PER_DOMAIN設(shè)置,而改為使用此設(shè)置,表示并發(fā)限制將應(yīng)用于每個IP地址,而不是每個域。默認(rèn)為16COOKIES_ENABLED是否啟用Cookie中間件,若禁用,則不會將Cookie發(fā)送至Web服務(wù)器。默認(rèn)為TrueTELNETCONSOLE_ENABLED是否啟用telnet控制臺。默認(rèn)為TrueDEFAULT_REQUEST_HEADERS用于ScrapyHTTP請求的默認(rèn)標(biāo)頭。默認(rèn)為{'Accept':'text/html,

application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-

Language':'en',}SPIDER_MIDDLEWARES項目中啟用的Spider中間件的字典及其順序。默認(rèn)為{}DOWNLOADER_MIDDLEWARES項目中啟用的下載器中間件的字典及其順序。默認(rèn)為{}EXTENSIONS項目中啟用的擴(kuò)展及其順序的字典。默認(rèn)為{}(續(xù)上表)通過Scrapy爬取文本信息設(shè)置名稱說明ITEM_PIPELINES項目中啟用的管道及其順序的字典。默認(rèn)為{}AUTOTHROTTLE_ENABLED是否啟用AutoThrottle擴(kuò)展。默認(rèn)為FalseAUTOTHROTTLE_START_DELAY最初的下載延遲(以s為單位)。默認(rèn)為5.0AUTOTHROTTLE_MAX_DELAY在高延遲情況下設(shè)置的最大下載延遲(以s為單位)。默認(rèn)為60.0AUTOTHROTTLE_TARGET_CONCURRENCYScrapy應(yīng)平行發(fā)送到遠(yuǎn)程網(wǎng)站的平均請求數(shù)量。默認(rèn)為1.0AUTOTHROTTLE_DEBUG是否啟用AutoThrottle調(diào)試模式,該模式將顯示收到的每個響應(yīng)的統(tǒng)計數(shù)據(jù),以便用戶實時調(diào)整參數(shù)。默認(rèn)為False(續(xù)上表)通過Scrapy爬取文本信息設(shè)置名稱說明HTTPCACHE_ENABLED是否啟用HTTP緩存。默認(rèn)為FalseHTTPCACHE_EXPIRATION_SECS緩存請求的到期時間,以s為單位。默認(rèn)為0HTTPCACHE_DIR用于存儲(低級別)HTTP緩存的目錄,如果為空,則HTTP緩存將被禁用,提供的應(yīng)該是基于Scrapy目錄的相對路徑HTTPCACHE_IGNORE_HTTP_CODES禁用緩存列表中的HTTP代碼響應(yīng)。默認(rèn)為[]HTTPCACHE_STORAGE實現(xiàn)高速緩存存儲后端的類。默認(rèn)為“scrapy.extensions.

httpcache.FilesystemCacheStorage”TipDMSpider項目中需要修改的設(shè)置分別為ROBOTSTXT_OBEY、DOWNLOAD_DELAY、ITEM_PIPELINES、HTTPCACHE_ENABLED、HTTPCACHE_DIR。在PyCharm的“Terminal”中運行“scrapycrawltipdm”命令運行項目。通過Scrapy爬取文本信息1通過Scrapy爬取文本信息目錄認(rèn)識Scrapy2定制下載器中間件3任務(wù)描述下載器中間件位于引擎和下載器之間。引擎將未處理的請求發(fā)送給下載器的時候,會經(jīng)過下載器中間件,這時在中間件里可以包裝請求,如修改請求頭信息(設(shè)置User-Agent、Cookie等)和添加代理IP地址。當(dāng)下載器將網(wǎng)站的響應(yīng)發(fā)送給引擎時,也會經(jīng)過下載器中間件,此時即可對響應(yīng)內(nèi)容進(jìn)行處理。定制下載器中間件任務(wù)分析編寫下載器中間件腳本。激活下載器中間件。定制下載器中間件每個中間件組件都是一個Python類,下載器中間件定義了process_request()、process_response()、process_exception()中的一種或多種方法。process_request()方法將會被所有通過下載器中間件的每一個請求調(diào)用,具有request和spider兩個參數(shù),參數(shù)說明如表所示。定制下載器中間件1.編寫下載器中間件腳本參數(shù)名稱說明request接收request。表示被處理的請求。無默認(rèn)值spider接收Spiders。表示被處理請求對應(yīng)的Spiders。無默認(rèn)值process_request()方法的返回值有4種類型,每種返回值類型的說明如表所示。定制下載器中間件返回值類型說明NoneScrapy將繼續(xù)處理該請求,執(zhí)行其他中間件的相應(yīng)方法,直到合適的下載器處理函數(shù)被調(diào)用,該請求才被執(zhí)行ResponseScrapy不會調(diào)用其他的process_request()、process_exception()方法,或相應(yīng)的下載方法,而將返回該響應(yīng)。已安裝的中間件的process_response()方法則會在每個響應(yīng)返回時被調(diào)用RequestScrapy停止調(diào)用process_request()方法并重新調(diào)度返回的請求RaiseIgnoreRequest下載器中間件的process_exeption()方法會被調(diào)用。如果沒有任何一個方法處理該返回值,那么Request的errback()方法會被調(diào)用。如果沒有代碼處理拋出的異常,那么該異常將被忽略且無記錄下載器中間件常用于防止爬蟲被網(wǎng)站的反爬蟲規(guī)則所識別。通常繞過這些規(guī)則的常見方法如下。動態(tài)設(shè)置User-Agent,隨機切換User-Agent,模擬不同用戶的瀏覽器信息。禁用Cookie,也就是不啟用CookiesMiddleware,不向服務(wù)器發(fā)送Cookie。有些網(wǎng)站通過Cookie的使用來發(fā)現(xiàn)爬蟲行為,可以通過COOKIES_ENABLED控制CookiesMiddleware的開啟和關(guān)閉。設(shè)置延遲下載,防止訪問過于頻繁,設(shè)置延遲時間為2s或更高,可以通過DOWNLOAD_DELAY控制下載頻率。定制下載器中間件下載器中間件常用于防止爬蟲被網(wǎng)站的反爬蟲規(guī)則所識別。通常繞過這些規(guī)則的常見方法如下。使用百度等搜索引擎服務(wù)器網(wǎng)頁緩存獲取的網(wǎng)頁數(shù)據(jù)。使用IP地址池,現(xiàn)在大部分網(wǎng)站都是根據(jù)IP地址來判斷是否為同一訪問者的。使用Crawlera(專用于爬蟲的代理組件),正確配置Crawlera和下載器中間件后,項目所有的請求都可通過Crawlera發(fā)出。定制下載器中間件從實現(xiàn)難度上看,比較容易實現(xiàn)的方法是(1)、(2)、(3)、(5),其中,(2)與(3)通過修改settings腳本即可實現(xiàn),另外兩種則是使用process_request()方法隨機選擇訪問網(wǎng)頁的User-Agent與隨機切換訪問IP地址來實現(xiàn)的。在TipDMSpider項目的middlewares腳本下創(chuàng)建下載器中間件,實現(xiàn)(1)、(5)兩種方法。定制下載器中間件除了定制下載器中間件外,在Scrapy框架中已經(jīng)默認(rèn)提供并開啟了眾多下載器中間件,在內(nèi)置的下載器中間件中,DOWNLOADER_MIDDLEWARES_BASE設(shè)置的各中間件說明及其順序如表所示。定制下載器中間件中間件名稱說明順序CookiesMiddleware該中間件使得爬取需要Cookie(如使用session)的網(wǎng)站成為可能。其追蹤了Web服務(wù)器發(fā)送的Cookie,并在之后的請求中將其發(fā)送回去,就如瀏覽器所做的那樣900DefaultHeadersMiddleware該中間件設(shè)置DEFAULT_REQUEST_HEADERS指定的默認(rèn)requestheader550DownloadTimeoutMiddleware該中間件設(shè)置DOWNLOAD_TIMEOUT指定的請求下載超時時間350HttpAuthMiddleware該中間件完成某些使用HTTP認(rèn)證的Spiders生成的請求的認(rèn)證過程300HttpCacheMiddleware該中間件為所有HTTP請求及響應(yīng)提供了底層(low-level)緩存支持,由Cache存儲后端及Cache策略組成900(續(xù)上表)定制下載器中間件中間件名稱說明順序HttpCompressionMiddleware該中間件允許從網(wǎng)站接收和發(fā)送壓縮(gzip、deflate格式)數(shù)據(jù)590HttpProxyMiddleware該中間件提供了對請求設(shè)置HTTP代理的支持。用戶可以通過在Request對象中設(shè)置proxy元數(shù)據(jù)來開啟代理750RedirectMiddleware該中間件根據(jù)響應(yīng)狀態(tài)處理重定向的請求600MetaRefreshMiddleware該中間件根據(jù)<meta-refresh>標(biāo)簽處理請求的重定向580RetryMiddleware該中間件將重試可能由于臨時的問題(如連接超時或HTTP500錯誤)而失敗的網(wǎng)頁500RobotsTxtMiddleware該中間件過濾所有robots.txtexclusionstandard中禁止的請求100DownloaderStats保存所有通過的請求、響應(yīng)及異常的中間件850UserAgentMiddleware用于指定Spiders的默認(rèn)User-Agent的中間件400激活下載器中間件組件,需要將其加入settings腳本下的DOWNLOADER_MIDDLEWARES設(shè)置中。這個設(shè)置是一個字典(dict),鍵為中間件類的路徑,值為其中間件的順序(order),同時會根據(jù)順序值進(jìn)行排序,最后得到啟用中間件的有序列表,即第一個中間件最靠近引擎,最后一個中間件最靠近下載器。激活TipDMSpider項目中middlewares目錄下

溫馨提示

  • 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

提交評論