版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd12022/2/1711:09:52
內(nèi)容簡(jiǎn)介
本書(shū)基于Python3,系統(tǒng)全面地講解了Python網(wǎng)絡(luò)爬蟲(chóng)的基礎(chǔ)知識(shí)。全書(shū)共分11章,內(nèi)容
包括網(wǎng)絡(luò)爬蟲(chóng)概述、網(wǎng)頁(yè)請(qǐng)求原理與爬蟲(chóng)基礎(chǔ)、urllib庫(kù)與異常處理、requests庫(kù)、數(shù)據(jù)解析技術(shù)、
BeautifulSoup庫(kù)、動(dòng)態(tài)頁(yè)面爬取、爬蟲(chóng)數(shù)據(jù)的存儲(chǔ)、爬蟲(chóng)框架Scrapy、CrawlSpider、圖像識(shí)別與
文字處理。
本書(shū)適合作為高等職業(yè)院校電子信息類(lèi)各專(zhuān)業(yè)的教材,也可作為培訓(xùn)學(xué)校的培訓(xùn)教材,以及
Python爬蟲(chóng)愛(ài)好者的自學(xué)用書(shū)。
圖書(shū)在版編目(CIP)數(shù)據(jù)
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)/鄧晨曦主編.—北京:中國(guó)鐵道
出版社有限公司,2022.2
職業(yè)教育賽教一體化課程改革系列規(guī)劃教材
ISBN978-7-113-28658-3
Ⅰ.①P…Ⅱ.①鄧…Ⅲ.①軟件工具-程序設(shè)計(jì)-
職業(yè)教育-教材Ⅳ.①TP311.56
中國(guó)版本圖書(shū)館CIP數(shù)據(jù)核字(2021)第267907號(hào)
書(shū)名:Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
作者:鄧晨曦
策劃:徐海英王春霞編輯部電話(huà):(010)63551006
責(zé)任編輯:王春霞彭立輝
封面制作:劉穎
責(zé)任校對(duì):苗丹
責(zé)任印制:樊啟鵬
出版發(fā)行:中國(guó)鐵道出版社有限公司(100054,北京市西城區(qū)右安門(mén)西街8號(hào))
網(wǎng)址:/51eds/
印刷:三河市國(guó)英印務(wù)有限公司
版次:2022年2月第1版2022年2月第1次印刷
開(kāi)本:850mm×1168mm1/16印張:11.75字?jǐn)?shù):299千
書(shū)號(hào):ISBN978-7-113-28658-3
定價(jià):39.00元
版權(quán)所有侵權(quán)必究
凡購(gòu)買(mǎi)鐵道版圖書(shū),如有印制質(zhì)量問(wèn)題,請(qǐng)與本社教材圖書(shū)營(yíng)銷(xiāo)部聯(lián)系調(diào)換。電話(huà):(010)63550836
打擊盜版舉報(bào)電話(huà):(010)63549461
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd22022/2/228:54:22
前言
為認(rèn)真貫徹落實(shí)教育部實(shí)施新時(shí)代中國(guó)特色高水平高職學(xué)校和專(zhuān)業(yè)群建設(shè),扎實(shí)、持續(xù)
地推進(jìn)職校改革,強(qiáng)化內(nèi)涵建設(shè)和高質(zhì)量發(fā)展,落實(shí)雙高計(jì)劃,抓好職業(yè)院校信息技術(shù)人才培
養(yǎng)方案實(shí)施及配套建設(shè),我們統(tǒng)籌規(guī)劃并啟動(dòng)了“職業(yè)教育賽教一體化課程改革系列規(guī)劃教材”
(云計(jì)算技術(shù)與應(yīng)用、大數(shù)據(jù)技術(shù)與應(yīng)用、網(wǎng)絡(luò)綜合布線(xiàn)、傳感器應(yīng)用技術(shù)、物聯(lián)網(wǎng).NET開(kāi)
發(fā)、物聯(lián)網(wǎng)嵌入式開(kāi)發(fā)、物聯(lián)網(wǎng)移動(dòng)應(yīng)用開(kāi)發(fā)、Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn))。本系列教材是由教
育教學(xué)一線(xiàn)專(zhuān)家、教育企業(yè)一線(xiàn)工程師、中國(guó)鐵道出版社有限公司精英數(shù)十人團(tuán)隊(duì)的匠心之作,
是全體編委精益求精,在日復(fù)一日、年復(fù)一年的工作中不斷探索和超越的教學(xué)結(jié)晶。本書(shū)教學(xué)
設(shè)計(jì)遵循教學(xué)規(guī)律,涉及內(nèi)容是真實(shí)項(xiàng)目的拆分與提煉。
本書(shū)基于Python3,系統(tǒng)全面地講解了Python網(wǎng)絡(luò)爬蟲(chóng)的基礎(chǔ)知識(shí)。全書(shū)共分11章,具
體介紹如下:
第1、2章主要介紹網(wǎng)絡(luò)爬蟲(chóng)的概念及實(shí)現(xiàn)原理,希望讀者能夠明白爬蟲(chóng)爬取網(wǎng)頁(yè)的過(guò)程,
并對(duì)產(chǎn)生的一些問(wèn)題有所了解。
第3~6章詳細(xì)介紹了網(wǎng)頁(yè)數(shù)據(jù)解析的相關(guān)技術(shù),包括urllib庫(kù)的使用、requests庫(kù)、
lxml、XPath、BeautifulSoup等。
第7章主要介紹動(dòng)態(tài)網(wǎng)頁(yè)爬取的內(nèi)容,希望讀者掌握抓取動(dòng)態(tài)網(wǎng)頁(yè)的一些技巧。
第8章主要介紹爬蟲(chóng)數(shù)據(jù)存儲(chǔ)的內(nèi)容,包括使用MySQL與MongoDB數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存
儲(chǔ)的相關(guān)知識(shí)。通過(guò)案例實(shí)操,講解了如何一步步從網(wǎng)站中爬取、解析、存儲(chǔ)電影信息。希望
讀者在存儲(chǔ)爬蟲(chóng)數(shù)據(jù)時(shí)根據(jù)具體情況靈活選擇合理的技術(shù)進(jìn)行運(yùn)用。
第9、10章主要介紹爬蟲(chóng)框架Scrapy以及自動(dòng)爬取網(wǎng)頁(yè)的爬蟲(chóng)CrawlSpider的相關(guān)知識(shí)。
通過(guò)對(duì)這兩章的學(xué)習(xí),可了解框架的基本知識(shí)與應(yīng)用,為以后深入學(xué)習(xí)打下堅(jiān)實(shí)基礎(chǔ)。
第11章主要介紹圖像識(shí)別與文字處理等內(nèi)容,希望讀者學(xué)會(huì)處理一些字符格式規(guī)范的圖
像和簡(jiǎn)單的驗(yàn)證碼。
本書(shū)由湖南環(huán)境生物職業(yè)技術(shù)學(xué)院的鄧晨曦任主編,武漢唯眾智創(chuàng)科技有限公司的陳家
楓、仙桃職業(yè)學(xué)院的李明海、襄陽(yáng)職業(yè)技術(shù)學(xué)院的田勇、重慶工商職業(yè)學(xué)院的向濤任副主編。
I
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd12022/2/1711:09:52
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
具體分工如下:鄧晨曦編寫(xiě)第1章、第2章、第5章、第6章、第8章、第11章;陳家楓編
寫(xiě)第3章、第4章;李明海編寫(xiě)第7章;田勇編寫(xiě)第9章;向濤編寫(xiě)第10章。全書(shū)由鄧晨曦
統(tǒng)稿。
由于時(shí)間倉(cāng)促,編者水平有限,書(shū)中難免存在疏漏與不妥之處,敬請(qǐng)廣大讀者批評(píng)指正。
編者
2021年7月
II
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd22022/2/1711:09:52
目錄
第1章網(wǎng)絡(luò)爬蟲(chóng)概述12.4抓包工具Fiddler17
2.4.1Fiddler簡(jiǎn)介17
1.1爬蟲(chóng)產(chǎn)生背景1
2.4.2Fiddler工作原理與界面18
1.1.1企業(yè)產(chǎn)生的數(shù)據(jù)1
2.4.3Fiddler爬取HTTPS設(shè)置22
1.1.2數(shù)據(jù)平臺(tái)購(gòu)買(mǎi)的數(shù)據(jù)1
2.4.4Fiddler捕獲Chrome會(huì)話(huà)23
1.1.3政府/機(jī)構(gòu)公開(kāi)的數(shù)據(jù)2
1.1.4數(shù)據(jù)管理咨詢(xún)公司的數(shù)據(jù)2
第3章urllib庫(kù)與異常處理26
1.1.5爬取的網(wǎng)絡(luò)數(shù)據(jù)2
3.1urllib庫(kù)簡(jiǎn)介26
1.2爬蟲(chóng)的概念2
3.1.1快速使用urllib爬取網(wǎng)頁(yè)27
1.3爬蟲(chóng)的用途2
3.1.2urllib數(shù)據(jù)傳輸30
1.4爬蟲(chóng)的組成3
3.1.3瀏覽器模擬——Headers請(qǐng)求
1.5爬蟲(chóng)的類(lèi)型4
偽裝34
1.5.1通用爬蟲(chóng)4
3.2代理服務(wù)器設(shè)置34
1.5.2聚焦爬蟲(chóng)5
3.3超時(shí)設(shè)置36
1.5.3累積式和增量式爬蟲(chóng)6
3.4異常處理37
1.5.4表層爬蟲(chóng)和深層爬蟲(chóng)6
3.4.1URLError37
第2章網(wǎng)頁(yè)請(qǐng)求原理與爬蟲(chóng)基礎(chǔ)73.4.2HTTPError38
3.5urllib庫(kù)爬蟲(chóng)實(shí)戰(zhàn)——百度貼吧39
2.1爬蟲(chóng)實(shí)現(xiàn)原理7
2.1.1通用爬蟲(chóng)7
第4章requests庫(kù)42
2.1.2聚焦爬蟲(chóng)8
4.1requests庫(kù)概述42
2.2HTTP基礎(chǔ)8
4.1.1實(shí)例引入43
2.2.1HTTP與HTTPS8
4.1.2request44
2.2.2HTTP請(qǐng)求過(guò)程9
4.1.3response47
2.2.3客戶(hù)端請(qǐng)求9
4.1.4Robots協(xié)議48
2.2.4服務(wù)端響應(yīng)11
4.2高級(jí)用法51
2.3網(wǎng)頁(yè)基礎(chǔ)13
4.2.1文件上傳51
I
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd12022/2/1711:09:52
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
4.2.2Cookies526.3.5搜索文檔樹(shù)104
4.2.3SSL證書(shū)驗(yàn)證556.3.6CSS選擇器114
4.2.4會(huì)話(huà)保持56
第7章動(dòng)態(tài)頁(yè)面爬取119
第5章數(shù)據(jù)解析技術(shù)577.1動(dòng)態(tài)網(wǎng)頁(yè)介紹119
5.1網(wǎng)頁(yè)數(shù)據(jù)和結(jié)構(gòu)577.1.1JavaScript119
5.1.1網(wǎng)頁(yè)數(shù)據(jù)格式577.1.2jQuery120
5.1.2網(wǎng)頁(yè)結(jié)構(gòu)577.1.3AJAX120
5.2lxml587.1.4DHTML120
5.2.1安裝lxml587.2安裝Selenium和PhantomJS模塊121
5.2.2lxml庫(kù)的使用597.2.1Selenium下載安裝121
5.3XPath637.2.2PhantomJS下載安裝122
5.3.1節(jié)點(diǎn)關(guān)系637.3Selenium和PhantomJS基本操作124
5.3.2XPath語(yǔ)法647.3.1基本使用124
5.3.3節(jié)點(diǎn)軸677.3.2聲明瀏覽器對(duì)象126
5.4pyquery687.3.3節(jié)點(diǎn)查找126
5.4.1pyquery安裝687.3.4鼠標(biāo)動(dòng)作鏈129
5.4.2使用pyquery697.3.5填充表單129
7.3.6彈窗處理130
第6章BeautifulSoup庫(kù)797.3.7頁(yè)面切換130
6.1BeautifulSoup簡(jiǎn)介797.3.8頁(yè)面前進(jìn)和后退130
6.1.1Windows下安裝BeautifulSoup807.3.9Cookies130
6.1.2Linux下安裝BeautifulSoup817.3.10頁(yè)面等待130
6.1.3創(chuàng)建BeautifulSoup對(duì)象827.4案例——模擬登錄QQ郵箱132
6.2對(duì)象種類(lèi)837.5案例——模擬登錄物聯(lián)網(wǎng)融合云
6.2.1Tag84平臺(tái)135
6.2.2NavigableString88
6.2.3BeautifulSoup89第8章爬蟲(chóng)數(shù)據(jù)的存儲(chǔ)137
6.2.4Comment908.1數(shù)據(jù)存儲(chǔ)概述137
6.3遍歷文檔樹(shù)918.2文件存儲(chǔ)138
6.3.1子節(jié)點(diǎn)918.2.1TXT文本存儲(chǔ)138
6.3.2父節(jié)點(diǎn)988.2.2JSON文件存儲(chǔ)139
6.3.3兄弟節(jié)點(diǎn)998.2.3把數(shù)據(jù)存儲(chǔ)到CSV142
6.3.4前后節(jié)點(diǎn)1028.3數(shù)據(jù)庫(kù)存儲(chǔ)143
II
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd22022/2/1711:09:52
目錄
8.3.1MySQL1439.3.1項(xiàng)目創(chuàng)建161
8.3.2MongoDB1459.3.2文件介紹161
8.4使用MySQL存儲(chǔ)網(wǎng)站電影信息1509.3.3代碼編寫(xiě)163
8.4.1頁(yè)面分析1509.3.4常用命令167
8.4.2爬取全部頁(yè)面1519.4Scrapy架構(gòu)168
8.4.3通過(guò)bs4選取數(shù)據(jù)1529.4.1Scrapy框架介紹168
8.4.4通過(guò)MySQL存儲(chǔ)電影信息1529.4.2數(shù)據(jù)流169
8.5使用MongoDB存儲(chǔ)網(wǎng)站音樂(lè)信息...153
8.5.1頁(yè)面分析153第10章CrawlSpider170
8.5.2爬取全部頁(yè)面15310.1CrawlSpider簡(jiǎn)介170
8.5.3通過(guò)bs4選取數(shù)據(jù)15410.2LinkExtractor鏈接提取171
8.5.4通過(guò)MongoDB存儲(chǔ)音樂(lè)信息15510.3CrawlSpider實(shí)戰(zhàn)173
第9章爬蟲(chóng)框架Scrapy156第11章圖像識(shí)別與文字處理175
9.1常見(jiàn)Python爬蟲(chóng)框架15611.1OCR概述175
9.2Scrapy安裝與配置15811.1.1Tesseract176
9.2.1Windows下的安裝與配置15811.1.2Pillow和pytesseract176
9.2.2Linux下的安裝與配置15911.2處理規(guī)范格式的文字178
9.2.3MAC下的安裝與配置15911.3驗(yàn)證碼讀取180
9.3Scrapy基本操作161
III
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd32022/2/1711:09:53
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd42022/2/1711:09:53
第1章
網(wǎng)絡(luò)爬蟲(chóng)概述
在大數(shù)據(jù)時(shí)代,互聯(lián)網(wǎng)成了人們獲取信息的主要手段,人們習(xí)慣利用百度等搜索引擎查找直
接需要的信息與網(wǎng)站,那么搜索引擎是怎樣找到這些網(wǎng)站的?其實(shí),類(lèi)似百度這樣的搜索引擎都
是使用網(wǎng)絡(luò)爬蟲(chóng)從互聯(lián)網(wǎng)上爬取數(shù)據(jù)的。本章就對(duì)爬蟲(chóng)知識(shí)進(jìn)行詳細(xì)介紹,讓大家對(duì)爬蟲(chóng)有基本
的了解。
1.1爬蟲(chóng)產(chǎn)生背景
視頻
如今,人類(lèi)社會(huì)已經(jīng)進(jìn)入了大數(shù)據(jù)時(shí)代,通過(guò)對(duì)大量的數(shù)據(jù)進(jìn)行分析,能夠產(chǎn)
生極大的商業(yè)價(jià)值。數(shù)據(jù)已經(jīng)成為必不可少的部分,因此數(shù)據(jù)的獲取非常重要。數(shù)
據(jù)的獲取方式有以下幾種。
1.1.1企業(yè)產(chǎn)生的數(shù)據(jù)
爬蟲(chóng)產(chǎn)生的背景
企業(yè)在生產(chǎn)運(yùn)營(yíng)中會(huì)產(chǎn)生與自身業(yè)務(wù)相關(guān)的大量數(shù)據(jù),例如,百度搜索指數(shù)、
騰訊公司業(yè)績(jī)數(shù)據(jù)、阿里巴巴集團(tuán)財(cái)務(wù)及運(yùn)營(yíng)數(shù)據(jù)、新浪微博微指數(shù)等。
大型互聯(lián)網(wǎng)公司擁有海量用戶(hù),有天然的數(shù)據(jù)積累優(yōu)勢(shì)。一些有數(shù)據(jù)意識(shí)的中小型企業(yè),也
開(kāi)始積累自己的數(shù)據(jù)。
1.1.2數(shù)據(jù)平臺(tái)購(gòu)買(mǎi)的數(shù)據(jù)
數(shù)據(jù)平臺(tái)是以數(shù)據(jù)交易為主營(yíng)業(yè)務(wù)的平臺(tái),例如,數(shù)據(jù)堂、國(guó)云數(shù)據(jù)市場(chǎng)、貴陽(yáng)大數(shù)據(jù)交易
所等數(shù)據(jù)平臺(tái)。
在各個(gè)數(shù)據(jù)交易平臺(tái)上購(gòu)買(mǎi)各行各業(yè)各種類(lèi)型的數(shù)據(jù),根據(jù)數(shù)據(jù)信息、獲取難易程度的不同,
價(jià)格也會(huì)有所不同。
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd12022/2/1711:09:53
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
1.1.3政府/機(jī)構(gòu)公開(kāi)的數(shù)據(jù)
政府和機(jī)構(gòu)也會(huì)公開(kāi)一些數(shù)據(jù),成為業(yè)內(nèi)權(quán)威信息的來(lái)源。例如,中華人民共和國(guó)國(guó)家統(tǒng)
計(jì)局?jǐn)?shù)據(jù)、中國(guó)人民銀行調(diào)查統(tǒng)計(jì)、世界銀行公開(kāi)數(shù)據(jù)、聯(lián)合國(guó)數(shù)據(jù)、納斯達(dá)克數(shù)據(jù)、新浪財(cái)
經(jīng)美股實(shí)時(shí)行情等。這些數(shù)據(jù)通常都是各地政府統(tǒng)計(jì)上報(bào),或者由行業(yè)內(nèi)專(zhuān)業(yè)的網(wǎng)站、機(jī)構(gòu)等
提供。
1.1.4數(shù)據(jù)管理咨詢(xún)公司的數(shù)據(jù)
數(shù)據(jù)管理咨詢(xún)公司為了提供專(zhuān)業(yè)的咨詢(xún)服務(wù),會(huì)收集和提供與特定業(yè)務(wù)相關(guān)的數(shù)據(jù)作為支撐。
這些管理咨詢(xún)公司數(shù)量眾多,如麥肯錫、埃森哲、尼爾森、艾瑞咨詢(xún)等。通常,這樣的公司都有
龐大的數(shù)據(jù)團(tuán)隊(duì),一般通過(guò)市場(chǎng)調(diào)研、問(wèn)卷調(diào)查、固定的樣本檢測(cè)、與各行各業(yè)的其他公司合作、
專(zhuān)家對(duì)話(huà)來(lái)獲取數(shù)據(jù),并根據(jù)客戶(hù)需求制定商業(yè)解決方案。
1.1.5爬取的網(wǎng)絡(luò)數(shù)據(jù)
如果數(shù)據(jù)市場(chǎng)上沒(méi)有需要的數(shù)據(jù),或者價(jià)格太高不愿意購(gòu)買(mǎi),可以利用爬蟲(chóng)技術(shù),爬取網(wǎng)站
上的數(shù)據(jù)。
無(wú)論是搜索引擎,還是個(gè)人或單位獲取目標(biāo)數(shù)據(jù),都需要從公開(kāi)網(wǎng)站上爬取大量數(shù)據(jù),在此
需求下,爬蟲(chóng)技術(shù)應(yīng)運(yùn)而生,并迅速發(fā)展成為一門(mén)成熟的技術(shù)。
1.2爬蟲(chóng)的概念
網(wǎng)絡(luò)爬蟲(chóng)又稱(chēng)網(wǎng)頁(yè)蜘蛛、網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間經(jīng)常稱(chēng)為網(wǎng)頁(yè)追逐者。
視頻
如果把互聯(lián)網(wǎng)比作一張大的蜘蛛網(wǎng),那么一臺(tái)計(jì)算機(jī)上的數(shù)據(jù)就是蜘蛛網(wǎng)上的一個(gè)
獵物,而爬蟲(chóng)程序就是一只小蜘蛛,沿著蜘蛛網(wǎng)抓取自己想要的獵物數(shù)據(jù)。
這里的數(shù)據(jù)是指互聯(lián)網(wǎng)上公開(kāi)的并且可以訪(fǎng)問(wèn)到的網(wǎng)頁(yè)信息,而不是網(wǎng)站的后
臺(tái)信息(沒(méi)有權(quán)限訪(fǎng)問(wèn)),更不是用戶(hù)注冊(cè)的信息(非公開(kāi)的)。
什么是爬蟲(chóng)爬蟲(chóng)官方的名字叫數(shù)據(jù)采集,英文一般稱(chēng)作Spider,就是通過(guò)編程來(lái)全自動(dòng)地
從互聯(lián)網(wǎng)上采集數(shù)據(jù)。人們常用的搜索引擎就是一種爬蟲(chóng),爬蟲(chóng)需要做的就是模擬
正常的網(wǎng)絡(luò)請(qǐng)求,例如,在網(wǎng)站上點(diǎn)擊一個(gè)網(wǎng)址,就是一次網(wǎng)絡(luò)請(qǐng)求。
Python爬蟲(chóng)是用Python編程語(yǔ)言實(shí)現(xiàn)的網(wǎng)絡(luò)爬蟲(chóng),主要用于網(wǎng)絡(luò)數(shù)據(jù)的爬取和處理。相比于
其他語(yǔ)言,Python是一門(mén)非常適合開(kāi)發(fā)網(wǎng)絡(luò)爬蟲(chóng)的編程語(yǔ)言,它具有大量?jī)?nèi)置包,可以輕松地實(shí)
現(xiàn)網(wǎng)絡(luò)爬蟲(chóng)功能。
1.3爬蟲(chóng)的用途
Python爬蟲(chóng)可以做的事情很多,如搜索數(shù)據(jù)、采集數(shù)據(jù)、廣告過(guò)濾等,還可以用于數(shù)據(jù)分析,
在數(shù)據(jù)的爬取方面作用非常大。下面通過(guò)一張圖來(lái)總結(jié)網(wǎng)絡(luò)爬蟲(chóng)的常用功能,如圖1-1所示。
2
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd22022/2/1711:09:53
第1章網(wǎng)絡(luò)爬蟲(chóng)概述
搜索引擎爬取圖片
爬取用戶(hù)公開(kāi)聯(lián)系網(wǎng)絡(luò)爬取網(wǎng)站用戶(hù)公開(kāi)
方式,進(jìn)行營(yíng)銷(xiāo)爬蟲(chóng)信息,進(jìn)行分析
收集金融信息做
投資分析自動(dòng)去除網(wǎng)頁(yè)廣告
…
圖1-1爬蟲(chóng)的常用功能
(1)通過(guò)網(wǎng)絡(luò)爬蟲(chóng)可以代替手工完成很多事情。例如,使用網(wǎng)絡(luò)爬蟲(chóng)搜集金融領(lǐng)域的數(shù)據(jù)資
源,將金融經(jīng)濟(jì)的發(fā)展與相關(guān)數(shù)據(jù)進(jìn)行集中處理,能夠?yàn)榻鹑陬I(lǐng)域的各個(gè)方面(如經(jīng)濟(jì)發(fā)展趨勢(shì)、
金融投資、風(fēng)險(xiǎn)分析等)提供“數(shù)據(jù)平臺(tái)”。
(2)瀏覽網(wǎng)頁(yè)上的信息時(shí),會(huì)看到上面有很多廣告信息,十分?jǐn)_人。這時(shí),可以利用網(wǎng)絡(luò)爬
蟲(chóng)將網(wǎng)頁(yè)上的信息全部爬取下來(lái),自動(dòng)過(guò)濾掉這些廣告,便于對(duì)信息的閱讀。
(3)大數(shù)據(jù)時(shí)代,要進(jìn)行數(shù)據(jù)分析,首先要有數(shù)據(jù)源,而學(xué)習(xí)爬蟲(chóng),可以讓人們獲取更多的
數(shù)據(jù)源,并且這些數(shù)據(jù)源可以按人們的目的進(jìn)行采集,去掉很多無(wú)關(guān)數(shù)據(jù)。
從某個(gè)網(wǎng)站中購(gòu)買(mǎi)商品時(shí),需要知道諸如暢銷(xiāo)品牌、價(jià)格走勢(shì)等信息。對(duì)于非網(wǎng)站管理員而言,
手動(dòng)統(tǒng)計(jì)是一個(gè)很大的工程。這時(shí),可以利用網(wǎng)絡(luò)爬蟲(chóng)輕松地采集到這些數(shù)據(jù),以便做出進(jìn)一步的
分析。
(4)推銷(xiāo)一些理財(cái)產(chǎn)品時(shí),需要找到一些目標(biāo)客戶(hù)和他們的聯(lián)系方式。這時(shí),可以利用網(wǎng)絡(luò)
爬蟲(chóng)設(shè)置對(duì)應(yīng)的規(guī)則,自動(dòng)從互聯(lián)網(wǎng)中采集目標(biāo)用戶(hù)的聯(lián)系方式等,以進(jìn)行營(yíng)銷(xiāo)使用。
(5)從互聯(lián)網(wǎng)中采集信息是一項(xiàng)重要的工作,如果單純地靠人力進(jìn)行信息采集,不僅低效煩瑣,
而且消耗成本高。爬蟲(chóng)的出現(xiàn)在一定程度上代替了手工訪(fǎng)問(wèn)網(wǎng)頁(yè),實(shí)現(xiàn)自動(dòng)化采集互聯(lián)網(wǎng)的數(shù)據(jù),
從而更高效地利用互聯(lián)網(wǎng)中的有效信息。
1.4爬蟲(chóng)的組成
網(wǎng)絡(luò)爬蟲(chóng)由控制節(jié)點(diǎn)、爬蟲(chóng)節(jié)點(diǎn)、資源庫(kù)組成。網(wǎng)絡(luò)爬蟲(chóng)中可以有多個(gè)控制節(jié)點(diǎn),每個(gè)控制
節(jié)點(diǎn)下有多個(gè)爬蟲(chóng)節(jié)點(diǎn),控制節(jié)點(diǎn)之間可以互相通信,同時(shí),控制節(jié)點(diǎn)和其下的各爬蟲(chóng)節(jié)點(diǎn)之間
也可以進(jìn)行相互通信,如圖1-2所示。
(1)控制節(jié)點(diǎn):也稱(chēng)為爬蟲(chóng)的中央控制器,主要負(fù)責(zé)根據(jù)URL地址分配線(xiàn)程,并調(diào)用爬蟲(chóng)節(jié)
點(diǎn)進(jìn)行具體的爬行。
(2)爬蟲(chóng)節(jié)點(diǎn):按照設(shè)置的算法,對(duì)網(wǎng)頁(yè)進(jìn)行具體的爬行,主要包括下載網(wǎng)頁(yè)以及對(duì)網(wǎng)頁(yè)的
文本進(jìn)行處理,爬行后,會(huì)將對(duì)應(yīng)的爬行結(jié)果存儲(chǔ)到對(duì)應(yīng)的資源庫(kù)中。
3
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd32022/2/1711:09:53
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
爬蟲(chóng)節(jié)點(diǎn)
爬蟲(chóng)節(jié)點(diǎn)
爬蟲(chóng)節(jié)點(diǎn)
爬蟲(chóng)節(jié)點(diǎn)爬蟲(chóng)節(jié)點(diǎn)控制節(jié)點(diǎn)控制節(jié)點(diǎn)
控制節(jié)點(diǎn)控制節(jié)點(diǎn)
爬蟲(chóng)節(jié)點(diǎn)
爬蟲(chóng)節(jié)點(diǎn)
爬蟲(chóng)節(jié)點(diǎn)爬蟲(chóng)節(jié)點(diǎn)
圖1-2網(wǎng)絡(luò)爬蟲(chóng)的控制節(jié)點(diǎn)和爬蟲(chóng)節(jié)點(diǎn)的結(jié)構(gòu)關(guān)系
1.5爬蟲(chóng)的類(lèi)型
通??梢园凑詹煌木S度對(duì)網(wǎng)絡(luò)爬蟲(chóng)進(jìn)行分類(lèi),例如,按照使用場(chǎng)景,可將爬蟲(chóng)分為通用爬
蟲(chóng)和聚焦爬蟲(chóng);按照爬取形式,可分為累積式爬蟲(chóng)和增量式爬蟲(chóng);按照爬取數(shù)據(jù)的存在方式,可分
為表層爬蟲(chóng)和深層爬蟲(chóng)。在實(shí)際應(yīng)用中,網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)通常是這幾類(lèi)爬蟲(chóng)的組合體。
1.5.1通用爬蟲(chóng)
通用爬蟲(chóng)是搜索引擎爬取系統(tǒng)(如Baidu.、Google、Yahoo等)的重要組成部分,主要目的是
將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成一個(gè)互聯(lián)網(wǎng)內(nèi)容的鏡像備份。聚焦爬蟲(chóng)是“面向特定主題需求”
的一種網(wǎng)絡(luò)爬蟲(chóng)程序。
通用網(wǎng)絡(luò)爬蟲(chóng)又稱(chēng)全網(wǎng)爬蟲(chóng)(ScalableWebCrawler),爬行對(duì)象從一些種子URL擴(kuò)充到整個(gè)
Web,主要為門(mén)戶(hù)站點(diǎn)搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)。由于商業(yè)原因,它們的技術(shù)
細(xì)節(jié)很少公布出來(lái)。這類(lèi)網(wǎng)絡(luò)爬蟲(chóng)的爬行范圍和數(shù)量巨大,對(duì)于爬行速度和存儲(chǔ)空間要求較高,
對(duì)于爬行頁(yè)面的順序要求相對(duì)較低,同時(shí)由于待刷新的頁(yè)面太多,通常采用并行工作方式,但需
要較長(zhǎng)時(shí)間才能刷新一次頁(yè)面。通用網(wǎng)絡(luò)爬蟲(chóng)適用于為搜索引擎搜索廣泛的主題,有較強(qiáng)的應(yīng)用
價(jià)值。
通用網(wǎng)絡(luò)爬蟲(chóng)的結(jié)構(gòu)大致可以分為頁(yè)面爬行模塊、頁(yè)面分析模塊、鏈接過(guò)濾模塊、頁(yè)面數(shù)據(jù)庫(kù)、
URL隊(duì)列、初始URL集合幾部分。為了提高工作效率,通用網(wǎng)絡(luò)爬蟲(chóng)會(huì)采取一定的爬行策略。常
用的爬行策略有深度優(yōu)先策略、廣度優(yōu)先策略。
(1)深度優(yōu)先策略:其基本方法是按照深度由低到高的順序,依次訪(fǎng)問(wèn)下一級(jí)網(wǎng)頁(yè)鏈接,直到
4
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd42022/2/1711:09:53
第1章網(wǎng)絡(luò)爬蟲(chóng)概述
不能再深入為止。爬蟲(chóng)在完成一個(gè)爬行分支后返回到上一鏈接節(jié)點(diǎn)進(jìn)一步搜索其他鏈接。當(dāng)所有
鏈接遍歷完后,爬行任務(wù)結(jié)束。這種策略比較適合垂直搜索或站內(nèi)搜索,但爬行頁(yè)面內(nèi)容層次較深
的站點(diǎn)時(shí)會(huì)造成資源的巨大浪費(fèi)。
(2)廣度優(yōu)先策略:此策略按照網(wǎng)頁(yè)內(nèi)容目錄層次深淺來(lái)爬行頁(yè)面,處于較淺目錄層次的頁(yè)面
首先被爬行。當(dāng)同一層次中的頁(yè)面爬行完畢后,爬蟲(chóng)再深入下一層繼續(xù)爬行。這種策略能夠有效
控制頁(yè)面的爬行深度,避免遇到一個(gè)無(wú)窮深層分支時(shí)無(wú)法結(jié)束爬行的問(wèn)題,實(shí)現(xiàn)方便,無(wú)須存儲(chǔ)
大量中間節(jié)點(diǎn),不足之處在于需要較長(zhǎng)時(shí)間才能爬行到目錄層次較深的頁(yè)面。
1.5.2聚焦爬蟲(chóng)
聚焦爬蟲(chóng)又稱(chēng)主題網(wǎng)絡(luò)爬蟲(chóng),是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)的頁(yè)面的網(wǎng)
絡(luò)爬蟲(chóng)。與通用爬蟲(chóng)相比,聚焦爬蟲(chóng)只需要爬行與主題相關(guān)的頁(yè)面,從而極大地節(jié)省了硬件和網(wǎng)
絡(luò)資源;保存的頁(yè)面也由于數(shù)量少而更新快,可以很好地滿(mǎn)足一些特定人群對(duì)特定領(lǐng)域信息的
需求。
聚焦網(wǎng)絡(luò)爬蟲(chóng)和通用網(wǎng)絡(luò)爬蟲(chóng)相比,增加了鏈接評(píng)價(jià)模塊以及內(nèi)容評(píng)價(jià)模塊。聚焦爬蟲(chóng)爬行
策略實(shí)現(xiàn)的關(guān)鍵是評(píng)價(jià)頁(yè)面內(nèi)容和鏈接的重要性,不同的方法計(jì)算出的重要性不同,由此導(dǎo)致鏈
接的訪(fǎng)問(wèn)順序也不同。
(1)基于內(nèi)容評(píng)價(jià)的爬行策略:DeBra將文本相似度的計(jì)算方法引入到網(wǎng)絡(luò)爬蟲(chóng)中,提出了
FishSearch算法,它將用戶(hù)輸入的查詢(xún)?cè)~作為主題,包含查詢(xún)?cè)~的頁(yè)面被視為與主題相關(guān),其局
限性在于無(wú)法評(píng)價(jià)頁(yè)面與主題相關(guān)度的高低。Herseovic對(duì)FishSearch算法進(jìn)行了改進(jìn),提出了
Sharksearch算法,利用空間向量模型計(jì)算頁(yè)面與主題的相關(guān)度大小。
(2)基于鏈接結(jié)構(gòu)評(píng)價(jià)的爬行策略:Web頁(yè)面作為一種半結(jié)構(gòu)化文檔,包含很多結(jié)構(gòu)信息,
可用來(lái)評(píng)價(jià)鏈接的重要性。PageRank算法最初用于搜索引擎信息檢索中對(duì)查詢(xún)結(jié)果進(jìn)行排序,也
可用于評(píng)價(jià)鏈接的重要性,具體做法就是每次選擇PageRank值較大頁(yè)面中的鏈接來(lái)訪(fǎng)問(wèn)。另一
個(gè)利用Web結(jié)構(gòu)評(píng)價(jià)鏈接價(jià)值的方法是HITS(Hyperlink-InducedTopicSearch,超文本敏感標(biāo)題
搜索)方法,它通過(guò)計(jì)算每個(gè)已訪(fǎng)問(wèn)頁(yè)面的Authority權(quán)重和Hub權(quán)重,并以此決定鏈接的訪(fǎng)問(wèn)
順序。
(3)基于增強(qiáng)學(xué)習(xí)的爬行策略:Rennie和McCallum將增強(qiáng)學(xué)習(xí)引入聚焦爬蟲(chóng),利用貝葉斯分
類(lèi)器,根據(jù)整個(gè)網(wǎng)頁(yè)文本和鏈接文本對(duì)超鏈接進(jìn)行分類(lèi),為每個(gè)鏈接計(jì)算出重要性,從而決定鏈
接的訪(fǎng)問(wèn)順序。
(4)基于語(yǔ)境圖的爬行策略:Diligenti等人提出了一種通過(guò)建立語(yǔ)境圖(ContextGraphs)學(xué)
習(xí)網(wǎng)頁(yè)之間的相關(guān)度,訓(xùn)練一個(gè)機(jī)器學(xué)習(xí)系統(tǒng),通過(guò)該系統(tǒng)可計(jì)算當(dāng)前頁(yè)面到相關(guān)Web頁(yè)面的距
離,距離越近的頁(yè)面中的鏈接優(yōu)先訪(fǎng)問(wèn)。印度理工大學(xué)(IIT)和IBM研究中心的研究人員開(kāi)發(fā)
了一個(gè)典型的聚焦網(wǎng)絡(luò)爬蟲(chóng)。該爬蟲(chóng)對(duì)主題的定義既不是采用關(guān)鍵詞也不是加權(quán)矢量,而是一組
具有相同主題的網(wǎng)頁(yè)。它包含兩個(gè)重要模塊:一個(gè)是分類(lèi)器,用來(lái)計(jì)算所爬行的頁(yè)面與主題的相
關(guān)度,確定是否與主題相關(guān);另一個(gè)是凈化器,用來(lái)識(shí)別通過(guò)較少鏈接連接到大量相關(guān)頁(yè)面的中
心頁(yè)面。
5
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd52022/2/1711:09:53
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
1.5.3累積式和增量式爬蟲(chóng)
1.累積式爬蟲(chóng)
累積式爬蟲(chóng)是指從某一個(gè)時(shí)間點(diǎn)開(kāi)始,通過(guò)遍歷的方式爬取系統(tǒng)所允許存儲(chǔ)和處理的所有
網(wǎng)頁(yè)。在理想的軟硬件環(huán)境下,經(jīng)過(guò)足夠的運(yùn)行時(shí)間,采用累積式爬取的策略可以保證爬取到
相當(dāng)規(guī)模的網(wǎng)頁(yè)集合。但由于Web數(shù)據(jù)的動(dòng)態(tài)特性,集合中網(wǎng)頁(yè)的被爬取時(shí)間點(diǎn)是不同的,頁(yè)
面被更新的情況也不同,因此累積式爬取到的網(wǎng)頁(yè)集合事實(shí)上并無(wú)法與真實(shí)環(huán)境中的網(wǎng)絡(luò)數(shù)據(jù)
保持一致。
2.增量式爬蟲(chóng)
增量式爬蟲(chóng)是指在具有一定量規(guī)模的網(wǎng)絡(luò)頁(yè)面集合的基礎(chǔ)上,采用更新數(shù)據(jù)的方式選取已有
集合中的過(guò)時(shí)網(wǎng)頁(yè)進(jìn)行爬取,以保證所爬取到的數(shù)據(jù)與真實(shí)網(wǎng)絡(luò)數(shù)據(jù)足夠接近。進(jìn)行增量式爬取
的前提是,系統(tǒng)已經(jīng)爬取了足夠數(shù)量的網(wǎng)絡(luò)頁(yè)面,并具有這些頁(yè)面被爬取的時(shí)間信息。
與周期性爬行和刷新頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)相比,增量式爬蟲(chóng)只會(huì)在需要時(shí)爬行新產(chǎn)生或發(fā)生更新
的頁(yè)面,并不重新下載沒(méi)有發(fā)生變化的頁(yè)面,可有效減少數(shù)據(jù)下載量,及時(shí)更新已爬行的網(wǎng)頁(yè),
減少時(shí)間和空間上的耗費(fèi),但是增加了爬行算法的復(fù)雜度和實(shí)現(xiàn)難度。
面向?qū)嶋H應(yīng)用環(huán)境的網(wǎng)絡(luò)蜘蛛設(shè)計(jì)中,通常既包括累積式爬取,也包括增量式爬取。累積式
爬取一般用于數(shù)據(jù)集合的整體建立或大規(guī)模更新階段;而增量式爬取則主要針對(duì)數(shù)據(jù)集合的日常維
護(hù)與即時(shí)更新。
1.5.4表層爬蟲(chóng)和深層爬蟲(chóng)
Web頁(yè)面按存在方式可以分為表層網(wǎng)頁(yè)和深層網(wǎng)頁(yè)。針對(duì)這兩種網(wǎng)頁(yè)的爬蟲(chóng)分別叫作表層爬
蟲(chóng)和深層爬蟲(chóng)。
1.表層爬蟲(chóng)
爬取表層網(wǎng)頁(yè)的爬蟲(chóng)叫作表層爬蟲(chóng)。表層網(wǎng)頁(yè)是指?jìng)鹘y(tǒng)搜索引擎可以索引,以超鏈接可以到
達(dá)的靜態(tài)網(wǎng)頁(yè)為主構(gòu)成的Web頁(yè)面。
2.深層爬蟲(chóng)
爬取深層網(wǎng)頁(yè)的爬蟲(chóng)叫作深層爬蟲(chóng)。深層網(wǎng)頁(yè)是那些大部分內(nèi)容不能通過(guò)靜態(tài)鏈接獲取的、
隱藏在搜索表單后的,只有用戶(hù)提交一些關(guān)鍵詞才能獲得的Web頁(yè)面。例如,用戶(hù)注冊(cè)后內(nèi)容才
可見(jiàn)的網(wǎng)頁(yè)就屬于深層網(wǎng)頁(yè)。
在互聯(lián)網(wǎng)中,深層網(wǎng)頁(yè)的數(shù)量往往比表層網(wǎng)頁(yè)的數(shù)量要多很多。
與表層網(wǎng)頁(yè)相比,深層網(wǎng)頁(yè)上的數(shù)據(jù)爬取更加困難,要采用一定的附加策略才能夠自動(dòng)爬取。
爬取深層頁(yè)面,需要想辦法自動(dòng)填寫(xiě)好對(duì)應(yīng)的表單,所以,深層網(wǎng)絡(luò)爬蟲(chóng)最重要的部分即為
表單填寫(xiě)部分。
深層網(wǎng)絡(luò)爬蟲(chóng)主要由URL列表、LVS列表(LVS指的是標(biāo)簽/數(shù)值集合,即填充表單的數(shù)
據(jù)源)、爬行控制器、解析器、LVS控制器、表單分析器、表單處理器、響應(yīng)分析器等部分構(gòu)成。
深層爬蟲(chóng)爬行過(guò)程中最重要的部分就是表單填寫(xiě),包含兩種類(lèi)型:
(1)基于領(lǐng)域知識(shí)的表單填寫(xiě):簡(jiǎn)單地說(shuō)就是建立一個(gè)填寫(xiě)表單的關(guān)鍵詞庫(kù),通過(guò)語(yǔ)義分析來(lái)
選取合適的關(guān)鍵詞填寫(xiě)表單。
(2)基于網(wǎng)頁(yè)結(jié)構(gòu)分析的表單填寫(xiě):此方法一般無(wú)領(lǐng)域知識(shí)或僅有有限的領(lǐng)域知識(shí),將網(wǎng)頁(yè)表
單表示成DOM樹(shù),從中提取表單各字段的值并自動(dòng)地進(jìn)行表單填寫(xiě)。
6
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd62022/2/1711:09:53
第2章
網(wǎng)頁(yè)請(qǐng)求原理
與爬蟲(chóng)基礎(chǔ)
在第1章中,我們對(duì)網(wǎng)絡(luò)爬蟲(chóng)有了初步的認(rèn)識(shí)。本章主要介紹爬蟲(chóng)實(shí)現(xiàn)原理,并結(jié)合網(wǎng)頁(yè)瀏
覽的過(guò)程介紹基于HTTP請(qǐng)求的原理,以及HTTP抓包工具Fiddler。
2.1爬蟲(chóng)實(shí)現(xiàn)原理
在第1章中我們已經(jīng)了解了爬蟲(chóng)分類(lèi)。不同類(lèi)型的網(wǎng)絡(luò)爬
開(kāi)始
蟲(chóng),其實(shí)現(xiàn)原理也是不同的,但這些實(shí)現(xiàn)原理中,會(huì)存在很多共
性。本章將分別以?xún)煞N典型的網(wǎng)絡(luò)爬蟲(chóng)為例(即通用網(wǎng)絡(luò)爬蟲(chóng)和
聚焦網(wǎng)絡(luò)爬蟲(chóng)),講解網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)原理。初始URL
2.1.1通用爬蟲(chóng)
通用爬蟲(chóng)從互聯(lián)網(wǎng)中搜集網(wǎng)頁(yè)、采集信息,采集的網(wǎng)頁(yè)信息獲取網(wǎng)頁(yè)
可為搜索引擎建立索引提供支持,決定著整個(gè)引擎系統(tǒng)的內(nèi)容是
否豐富,信息是否及時(shí),因此其性能的優(yōu)劣直接影響著搜索引擎
提取新的URL
的效果。放入U(xiǎn)RL隊(duì)列
首先看一下通用網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)原理。通用爬蟲(chóng)爬取網(wǎng)頁(yè)的
流程(見(jiàn)圖2-1)簡(jiǎn)要概括如下:
N滿(mǎn)足停止
(1)選取一部分種子URL,將這些URL放入待爬取的條件?
URL隊(duì)列。Y
(2)取出待爬取的URL,解析DNS得到主機(jī)的IP,并下載結(jié)束
URL對(duì)應(yīng)的網(wǎng)頁(yè),存儲(chǔ)到已下載的網(wǎng)頁(yè)庫(kù)中,并且將這些URL
圖2-1通用爬蟲(chóng)爬取網(wǎng)頁(yè)的流程
放進(jìn)已爬取的URL隊(duì)列。
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd72022/2/1711:09:53
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
(3)分析已爬取URL隊(duì)列中的URL,并將URL放入待爬取的URL隊(duì)列,從而進(jìn)入下一個(gè)循環(huán)。
以上就是通用網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)過(guò)程與基本原理,接下來(lái)分析聚焦網(wǎng)絡(luò)爬蟲(chóng)的基本原理及其實(shí)
現(xiàn)過(guò)程。
2.1.2聚焦爬蟲(chóng)
聚焦爬蟲(chóng)(又稱(chēng)為網(wǎng)頁(yè)蜘蛛、網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中經(jīng)常稱(chēng)為網(wǎng)頁(yè)追逐者),是“面
向特定主題需求”的一種網(wǎng)絡(luò)爬蟲(chóng)程序,它與通用搜索引擎爬蟲(chóng)的區(qū)別在于:聚焦爬蟲(chóng)在實(shí)施
網(wǎng)頁(yè)爬取時(shí)會(huì)對(duì)內(nèi)容進(jìn)行處理篩選,盡量保證只爬取與需求相關(guān)的網(wǎng)頁(yè)信息。
(1)對(duì)爬取目標(biāo)的描述或定義。
(2)對(duì)網(wǎng)頁(yè)或數(shù)據(jù)的分析與過(guò)濾。
(3)對(duì)URL的搜索策略。
爬取目標(biāo)的描述和定義是決定網(wǎng)頁(yè)分析算法與URL搜索策略如何制訂的基礎(chǔ)。而網(wǎng)頁(yè)分析算
法和候選URL排序算法是決定搜索引擎所提供的服務(wù)形式和爬蟲(chóng)網(wǎng)頁(yè)爬取行為的關(guān)鍵所在。這兩
部分的算法是緊密相關(guān)的。
2.2HTTP基礎(chǔ)
視頻2.2.1HTTP與HTTPS
在瀏覽網(wǎng)頁(yè)時(shí),通常會(huì)發(fā)現(xiàn)URL的開(kāi)頭有http或https,這就是訪(fǎng)問(wèn)資源需要
的協(xié)議類(lèi)型。例如,在瀏覽天貓時(shí)會(huì)發(fā)現(xiàn)瀏覽器地址欄出現(xiàn)了如圖2-2所示的URL
地址。我們還看到過(guò)ftp、sftp、?le等其他的URL開(kāi)頭,它們也是協(xié)議類(lèi)型。在爬
通信協(xié)議蟲(chóng)里面,所爬取的頁(yè)面一般都是http或者h(yuǎn)ttps開(kāi)頭的協(xié)議,這里主要介紹這兩個(gè)協(xié)議。
圖2-2天貓地址
網(wǎng)站的URL分為兩部分:通信協(xié)議和域名地址。域名地址很好理解,不同的域名地址表示網(wǎng)
站中不同的頁(yè)面;而通信協(xié)議,簡(jiǎn)單來(lái)說(shuō)就是瀏覽器和服務(wù)器之間溝通的語(yǔ)言。網(wǎng)站中的通信協(xié)
議一般就是HTTP協(xié)議和HTTPS協(xié)議。
HTTP(HyperTextTransferProtocol,超文本傳輸協(xié)議)是用于從網(wǎng)絡(luò)傳輸超文本數(shù)據(jù)到本地
瀏覽器的協(xié)議,它能保證高效而準(zhǔn)確地傳送超文本文檔。
一直以來(lái)HTTP協(xié)議都是最主流的網(wǎng)頁(yè)協(xié)議,但是互聯(lián)網(wǎng)發(fā)展到今天,HTTP協(xié)議的明文傳輸
會(huì)讓用戶(hù)存在一個(gè)非常大的安全隱患。試想一下,假如用戶(hù)在一個(gè)HTTP協(xié)議的網(wǎng)站上面購(gòu)物,
需要在頁(yè)面上輸入銀行卡號(hào)和密碼,然后把數(shù)據(jù)提交到服務(wù)器實(shí)現(xiàn)購(gòu)買(mǎi)。如果這時(shí)候傳輸數(shù)據(jù)被
第三者截獲了,由于HTTP明文數(shù)據(jù)傳輸?shù)脑?,用?hù)的卡號(hào)和密碼就會(huì)被截獲者獲得。從一定
程度上來(lái)說(shuō),HTTP協(xié)議是不安全的。
HTTPS(HyperTextTransferProtocoloverSecureSocketLayer,超文本傳輸安全協(xié)議)是以安
全為目標(biāo)的HTTP通道,是HTTP的安全版,即HTTP下加入SSL層,簡(jiǎn)稱(chēng)為HTTPS。
8
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd82022/2/1711:09:53
第2章網(wǎng)頁(yè)請(qǐng)求原理與爬蟲(chóng)基礎(chǔ)
HTTPS協(xié)議可以理解為HTTP協(xié)議的升級(jí),就是在HTTP的基礎(chǔ)上增加了數(shù)據(jù)加密。在數(shù)據(jù)
進(jìn)行傳輸之前,對(duì)數(shù)據(jù)進(jìn)行加密,然后再發(fā)送到服務(wù)器。這樣,就算數(shù)據(jù)被第三者所截獲,但是
由于數(shù)據(jù)是加密的,所以個(gè)人信息是安全的。這就是HTTP和HTTPS的最大區(qū)別。
目前國(guó)內(nèi)的很多大型互聯(lián)網(wǎng)網(wǎng)站,如淘寶、京東、百度、騰訊等很早就已經(jīng)把HTTP換成了
HTTPS。
數(shù)據(jù)加密傳輸,是HTTP和HTTPS之間的本質(zhì)性區(qū)別,除此之外,HTTPS網(wǎng)站和HTTP網(wǎng)
站還有其他地方不同。
當(dāng)使用Chrome瀏覽器訪(fǎng)問(wèn)一個(gè)HTTP網(wǎng)站時(shí),仔細(xì)觀(guān)察會(huì)發(fā)現(xiàn)瀏覽器對(duì)所訪(fǎng)問(wèn)的HTTP網(wǎng)站
會(huì)顯示如圖2-3所示的“不安全”的安全警告,提示用戶(hù)當(dāng)前所訪(fǎng)問(wèn)的網(wǎng)站可能會(huì)存在風(fēng)險(xiǎn)。而訪(fǎng)
問(wèn)HTTPS網(wǎng)站時(shí),情況是完全不一樣的。
圖2-3安全警告
除了瀏覽器視覺(jué)上不同以外,HTTPS網(wǎng)站最重要的就是可以提升搜索排名。百度和谷歌已經(jīng)
明確表示,HTTPS網(wǎng)站將會(huì)作為搜索排名的一個(gè)重要權(quán)重指標(biāo)。也就是說(shuō),HTTPS網(wǎng)站比HTTP
網(wǎng)站在搜索排名中更有優(yōu)勢(shì)。
2.2.2HTTP請(qǐng)求過(guò)程
瀏覽器的主要功能是向服務(wù)器發(fā)出請(qǐng)求,并在窗口中顯示選擇的網(wǎng)絡(luò)資源。HTTP是一套計(jì)算
機(jī)通過(guò)網(wǎng)絡(luò)進(jìn)行通信的規(guī)則,它由兩部分組成:客戶(hù)端請(qǐng)求消息和服務(wù)器端響應(yīng)消息,通信過(guò)程如
圖2-4所示。
請(qǐng)求
響應(yīng)
客戶(hù)機(jī)服務(wù)器
圖2-4HTTP通信過(guò)程
這里的客戶(hù)機(jī)代表PC或手機(jī)瀏覽器,服務(wù)器即是要訪(fǎng)問(wèn)的網(wǎng)站所在的服務(wù)器。
當(dāng)用戶(hù)在瀏覽器的地址欄中輸入一個(gè)URL地址并按【Enter】鍵之后,瀏覽器會(huì)向HTTP服務(wù)
器發(fā)送HTTP請(qǐng)求。常用的HTTP請(qǐng)求包括GET和POST兩種方式。
視頻
2.2.3客戶(hù)端請(qǐng)求
從圖2-4可以看出,請(qǐng)求由客戶(hù)機(jī)向服務(wù)器發(fā)出,根據(jù)HTTP協(xié)議的規(guī)定,客
戶(hù)機(jī)發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息,由請(qǐng)求行、請(qǐng)求頭部、空行以及請(qǐng)
求包體(數(shù)據(jù))四部分組成。圖2-5所示為請(qǐng)求消息的一般格式。客戶(hù)端
9
Python網(wǎng)咯爬蟲(chóng)實(shí)戰(zhàn).indd92022/2/1711:09:53
Python網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)
請(qǐng)求方法空格URL空格協(xié)議版本回車(chē)符換行符請(qǐng)求行
頭部字段名稱(chēng):(冒號(hào))值回車(chē)符換行符
請(qǐng)求頭部
…
頭部字段名稱(chēng):(冒號(hào))值回車(chē)符換行符
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合同法學(xué)教學(xué)大綱
- 2025有限公司員工試用期合同
- 2025商業(yè)地產(chǎn)銷(xiāo)售代理合同
- 二零二五年度地質(zhì)災(zāi)害應(yīng)急土方運(yùn)輸服務(wù)合同3篇
- 2025年度養(yǎng)殖場(chǎng)養(yǎng)殖廢棄物資源化利用合同3篇
- 2025年度科技創(chuàng)新園區(qū)拆遷房產(chǎn)分割與產(chǎn)業(yè)扶持協(xié)議3篇
- 2025年度林業(yè)產(chǎn)業(yè)發(fā)展競(jìng)業(yè)禁止模板木方交易協(xié)議3篇
- 二零二五年度農(nóng)村集體建設(shè)用地個(gè)人地基買(mǎi)賣(mài)合同2篇
- 二零二五年度高速公路建設(shè)項(xiàng)目承包協(xié)議3篇
- 2025年度水上旅游安全事故處理與救援服務(wù)協(xié)議3篇
- 礦業(yè)公司規(guī)章制度匯編
- 《高低壓配電室施工工藝標(biāo)準(zhǔn)》
- 2024年太陽(yáng)能光伏組件高空清洗作業(yè)人員安全保障合同3篇
- 大學(xué)學(xué)業(yè)規(guī)劃講座
- 《國(guó)家課程建設(shè)》課件
- 浙江省衢州市2023-2024學(xué)年高一上學(xué)期1月期末數(shù)學(xué)試題 含解析
- 【課件】Unit+5+Fun+Clubs+Section+B+1a-2b課件人教版(2024)七年級(jí)英語(yǔ)上冊(cè)++
- 江蘇省南通市海門(mén)區(qū)2023-2024學(xué)年三年級(jí)上學(xué)期期末語(yǔ)文試題
- 2024年貴州貴陽(yáng)市貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 美國(guó)RAZ分級(jí)讀物目錄整理
評(píng)論
0/150
提交評(píng)論