Python網(wǎng)絡(luò)爬蟲實戰(zhàn)_第1頁
Python網(wǎng)絡(luò)爬蟲實戰(zhàn)_第2頁
Python網(wǎng)絡(luò)爬蟲實戰(zhàn)_第3頁
Python網(wǎng)絡(luò)爬蟲實戰(zhàn)_第4頁
Python網(wǎng)絡(luò)爬蟲實戰(zhàn)_第5頁
已閱讀5頁,還剩186頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)閱讀全文

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

文檔簡介

Python網(wǎng)咯爬蟲實戰(zhàn).indd12022/2/1711:09:52

內(nèi)容簡介

本書基于Python3,系統(tǒng)全面地講解了Python網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識。全書共分11章,內(nèi)容

包括網(wǎng)絡(luò)爬蟲概述、網(wǎng)頁請求原理與爬蟲基礎(chǔ)、urllib庫與異常處理、requests庫、數(shù)據(jù)解析技術(shù)、

BeautifulSoup庫、動態(tài)頁面爬取、爬蟲數(shù)據(jù)的存儲、爬蟲框架Scrapy、CrawlSpider、圖像識別與

文字處理。

本書適合作為高等職業(yè)院校電子信息類各專業(yè)的教材,也可作為培訓(xùn)學(xué)校的培訓(xùn)教材,以及

Python爬蟲愛好者的自學(xué)用書。

圖書在版編目(CIP)數(shù)據(jù)

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)/鄧晨曦主編.—北京:中國鐵道

出版社有限公司,2022.2

職業(yè)教育賽教一體化課程改革系列規(guī)劃教材

ISBN978-7-113-28658-3

Ⅰ.①P…Ⅱ.①鄧…Ⅲ.①軟件工具-程序設(shè)計-

職業(yè)教育-教材Ⅳ.①TP311.56

中國版本圖書館CIP數(shù)據(jù)核字(2021)第267907號

書名:Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

作者:鄧晨曦

策劃:徐海英王春霞編輯部電話:(010)63551006

責(zé)任編輯:王春霞彭立輝

封面制作:劉穎

責(zé)任校對:苗丹

責(zé)任印制:樊啟鵬

出版發(fā)行:中國鐵道出版社有限公司(100054,北京市西城區(qū)右安門西街8號)

網(wǎng)址:/51eds/

印刷:三河市國英印務(wù)有限公司

版次:2022年2月第1版2022年2月第1次印刷

開本:850mm×1168mm1/16印張:11.75字?jǐn)?shù):299千

書號:ISBN978-7-113-28658-3

定價:39.00元

版權(quán)所有侵權(quán)必究

凡購買鐵道版圖書,如有印制質(zhì)量問題,請與本社教材圖書營銷部聯(lián)系調(diào)換。電話:(010)63550836

打擊盜版舉報電話:(010)63549461

Python網(wǎng)咯爬蟲實戰(zhàn).indd22022/2/228:54:22

前言

為認(rèn)真貫徹落實教育部實施新時代中國特色高水平高職學(xué)校和專業(yè)群建設(shè),扎實、持續(xù)

地推進(jìn)職校改革,強(qiáng)化內(nèi)涵建設(shè)和高質(zhì)量發(fā)展,落實雙高計劃,抓好職業(yè)院校信息技術(shù)人才培

養(yǎng)方案實施及配套建設(shè),我們統(tǒng)籌規(guī)劃并啟動了“職業(yè)教育賽教一體化課程改革系列規(guī)劃教材”

(云計算技術(shù)與應(yīng)用、大數(shù)據(jù)技術(shù)與應(yīng)用、網(wǎng)絡(luò)綜合布線、傳感器應(yīng)用技術(shù)、物聯(lián)網(wǎng).NET開

發(fā)、物聯(lián)網(wǎng)嵌入式開發(fā)、物聯(lián)網(wǎng)移動應(yīng)用開發(fā)、Python網(wǎng)絡(luò)爬蟲實戰(zhàn))。本系列教材是由教

育教學(xué)一線專家、教育企業(yè)一線工程師、中國鐵道出版社有限公司精英數(shù)十人團(tuán)隊的匠心之作,

是全體編委精益求精,在日復(fù)一日、年復(fù)一年的工作中不斷探索和超越的教學(xué)結(jié)晶。本書教學(xué)

設(shè)計遵循教學(xué)規(guī)律,涉及內(nèi)容是真實項目的拆分與提煉。

本書基于Python3,系統(tǒng)全面地講解了Python網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識。全書共分11章,具

體介紹如下:

第1、2章主要介紹網(wǎng)絡(luò)爬蟲的概念及實現(xiàn)原理,希望讀者能夠明白爬蟲爬取網(wǎng)頁的過程,

并對產(chǎn)生的一些問題有所了解。

第3~6章詳細(xì)介紹了網(wǎng)頁數(shù)據(jù)解析的相關(guān)技術(shù),包括urllib庫的使用、requests庫、

lxml、XPath、BeautifulSoup等。

第7章主要介紹動態(tài)網(wǎng)頁爬取的內(nèi)容,希望讀者掌握抓取動態(tài)網(wǎng)頁的一些技巧。

第8章主要介紹爬蟲數(shù)據(jù)存儲的內(nèi)容,包括使用MySQL與MongoDB數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存

儲的相關(guān)知識。通過案例實操,講解了如何一步步從網(wǎng)站中爬取、解析、存儲電影信息。希望

讀者在存儲爬蟲數(shù)據(jù)時根據(jù)具體情況靈活選擇合理的技術(shù)進(jìn)行運(yùn)用。

第9、10章主要介紹爬蟲框架Scrapy以及自動爬取網(wǎng)頁的爬蟲CrawlSpider的相關(guān)知識。

通過對這兩章的學(xué)習(xí),可了解框架的基本知識與應(yīng)用,為以后深入學(xué)習(xí)打下堅實基礎(chǔ)。

第11章主要介紹圖像識別與文字處理等內(nèi)容,希望讀者學(xué)會處理一些字符格式規(guī)范的圖

像和簡單的驗證碼。

本書由湖南環(huán)境生物職業(yè)技術(shù)學(xué)院的鄧晨曦任主編,武漢唯眾智創(chuàng)科技有限公司的陳家

楓、仙桃職業(yè)學(xué)院的李明海、襄陽職業(yè)技術(shù)學(xué)院的田勇、重慶工商職業(yè)學(xué)院的向濤任副主編。

I

Python網(wǎng)咯爬蟲實戰(zhàn).indd12022/2/1711:09:52

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

具體分工如下:鄧晨曦編寫第1章、第2章、第5章、第6章、第8章、第11章;陳家楓編

寫第3章、第4章;李明海編寫第7章;田勇編寫第9章;向濤編寫第10章。全書由鄧晨曦

統(tǒng)稿。

由于時間倉促,編者水平有限,書中難免存在疏漏與不妥之處,敬請廣大讀者批評指正。

編者

2021年7月

II

Python網(wǎng)咯爬蟲實戰(zhàn).indd22022/2/1711:09:52

目錄

第1章網(wǎng)絡(luò)爬蟲概述12.4抓包工具Fiddler17

2.4.1Fiddler簡介17

1.1爬蟲產(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ù)平臺購買的數(shù)據(jù)1

2.4.4Fiddler捕獲Chrome會話23

1.1.3政府/機(jī)構(gòu)公開的數(shù)據(jù)2

1.1.4數(shù)據(jù)管理咨詢公司的數(shù)據(jù)2

第3章urllib庫與異常處理26

1.1.5爬取的網(wǎng)絡(luò)數(shù)據(jù)2

3.1urllib庫簡介26

1.2爬蟲的概念2

3.1.1快速使用urllib爬取網(wǎng)頁27

1.3爬蟲的用途2

3.1.2urllib數(shù)據(jù)傳輸30

1.4爬蟲的組成3

3.1.3瀏覽器模擬——Headers請求

1.5爬蟲的類型4

偽裝34

1.5.1通用爬蟲4

3.2代理服務(wù)器設(shè)置34

1.5.2聚焦爬蟲5

3.3超時設(shè)置36

1.5.3累積式和增量式爬蟲6

3.4異常處理37

1.5.4表層爬蟲和深層爬蟲6

3.4.1URLError37

第2章網(wǎng)頁請求原理與爬蟲基礎(chǔ)73.4.2HTTPError38

3.5urllib庫爬蟲實戰(zhàn)——百度貼吧39

2.1爬蟲實現(xiàn)原理7

2.1.1通用爬蟲7

第4章requests庫42

2.1.2聚焦爬蟲8

4.1requests庫概述42

2.2HTTP基礎(chǔ)8

4.1.1實例引入43

2.2.1HTTP與HTTPS8

4.1.2request44

2.2.2HTTP請求過程9

4.1.3response47

2.2.3客戶端請求9

4.1.4Robots協(xié)議48

2.2.4服務(wù)端響應(yīng)11

4.2高級用法51

2.3網(wǎng)頁基礎(chǔ)13

4.2.1文件上傳51

I

Python網(wǎng)咯爬蟲實戰(zhàn).indd12022/2/1711:09:52

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

4.2.2Cookies526.3.5搜索文檔樹104

4.2.3SSL證書驗證556.3.6CSS選擇器114

4.2.4會話保持56

第7章動態(tài)頁面爬取119

第5章數(shù)據(jù)解析技術(shù)577.1動態(tài)網(wǎng)頁介紹119

5.1網(wǎng)頁數(shù)據(jù)和結(jié)構(gòu)577.1.1JavaScript119

5.1.1網(wǎng)頁數(shù)據(jù)格式577.1.2jQuery120

5.1.2網(wǎng)頁結(jié)構(gòu)577.1.3AJAX120

5.2lxml587.1.4DHTML120

5.2.1安裝lxml587.2安裝Selenium和PhantomJS模塊121

5.2.2lxml庫的使用597.2.1Selenium下載安裝121

5.3XPath637.2.2PhantomJS下載安裝122

5.3.1節(jié)點(diǎn)關(guān)系637.3Selenium和PhantomJS基本操作124

5.3.2XPath語法647.3.1基本使用124

5.3.3節(jié)點(diǎn)軸677.3.2聲明瀏覽器對象126

5.4pyquery687.3.3節(jié)點(diǎn)查找126

5.4.1pyquery安裝687.3.4鼠標(biāo)動作鏈129

5.4.2使用pyquery697.3.5填充表單129

7.3.6彈窗處理130

第6章BeautifulSoup庫797.3.7頁面切換130

6.1BeautifulSoup簡介797.3.8頁面前進(jìn)和后退130

6.1.1Windows下安裝BeautifulSoup807.3.9Cookies130

6.1.2Linux下安裝BeautifulSoup817.3.10頁面等待130

6.1.3創(chuàng)建BeautifulSoup對象827.4案例——模擬登錄QQ郵箱132

6.2對象種類837.5案例——模擬登錄物聯(lián)網(wǎng)融合云

6.2.1Tag84平臺135

6.2.2NavigableString88

6.2.3BeautifulSoup89第8章爬蟲數(shù)據(jù)的存儲137

6.2.4Comment908.1數(shù)據(jù)存儲概述137

6.3遍歷文檔樹918.2文件存儲138

6.3.1子節(jié)點(diǎn)918.2.1TXT文本存儲138

6.3.2父節(jié)點(diǎn)988.2.2JSON文件存儲139

6.3.3兄弟節(jié)點(diǎn)998.2.3把數(shù)據(jù)存儲到CSV142

6.3.4前后節(jié)點(diǎn)1028.3數(shù)據(jù)庫存儲143

II

Python網(wǎng)咯爬蟲實戰(zhàn).indd22022/2/1711:09:52

目錄

8.3.1MySQL1439.3.1項目創(chuàng)建161

8.3.2MongoDB1459.3.2文件介紹161

8.4使用MySQL存儲網(wǎng)站電影信息1509.3.3代碼編寫163

8.4.1頁面分析1509.3.4常用命令167

8.4.2爬取全部頁面1519.4Scrapy架構(gòu)168

8.4.3通過bs4選取數(shù)據(jù)1529.4.1Scrapy框架介紹168

8.4.4通過MySQL存儲電影信息1529.4.2數(shù)據(jù)流169

8.5使用MongoDB存儲網(wǎng)站音樂信息...153

8.5.1頁面分析153第10章CrawlSpider170

8.5.2爬取全部頁面15310.1CrawlSpider簡介170

8.5.3通過bs4選取數(shù)據(jù)15410.2LinkExtractor鏈接提取171

8.5.4通過MongoDB存儲音樂信息15510.3CrawlSpider實戰(zhàn)173

第9章爬蟲框架Scrapy156第11章圖像識別與文字處理175

9.1常見Python爬蟲框架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驗證碼讀取180

9.3Scrapy基本操作161

III

Python網(wǎng)咯爬蟲實戰(zhàn).indd32022/2/1711:09:53

Python網(wǎng)咯爬蟲實戰(zhàn).indd42022/2/1711:09:53

第1章

網(wǎng)絡(luò)爬蟲概述

在大數(shù)據(jù)時代,互聯(lián)網(wǎng)成了人們獲取信息的主要手段,人們習(xí)慣利用百度等搜索引擎查找直

接需要的信息與網(wǎng)站,那么搜索引擎是怎樣找到這些網(wǎng)站的?其實,類似百度這樣的搜索引擎都

是使用網(wǎng)絡(luò)爬蟲從互聯(lián)網(wǎng)上爬取數(shù)據(jù)的。本章就對爬蟲知識進(jìn)行詳細(xì)介紹,讓大家對爬蟲有基本

的了解。

1.1爬蟲產(chǎn)生背景

視頻

如今,人類社會已經(jīng)進(jìn)入了大數(shù)據(jù)時代,通過對大量的數(shù)據(jù)進(jìn)行分析,能夠產(chǎn)

生極大的商業(yè)價值。數(shù)據(jù)已經(jīng)成為必不可少的部分,因此數(shù)據(jù)的獲取非常重要。數(shù)

據(jù)的獲取方式有以下幾種。

1.1.1企業(yè)產(chǎn)生的數(shù)據(jù)

爬蟲產(chǎn)生的背景

企業(yè)在生產(chǎn)運(yùn)營中會產(chǎn)生與自身業(yè)務(wù)相關(guān)的大量數(shù)據(jù),例如,百度搜索指數(shù)、

騰訊公司業(yè)績數(shù)據(jù)、阿里巴巴集團(tuán)財務(wù)及運(yùn)營數(shù)據(jù)、新浪微博微指數(shù)等。

大型互聯(lián)網(wǎng)公司擁有海量用戶,有天然的數(shù)據(jù)積累優(yōu)勢。一些有數(shù)據(jù)意識的中小型企業(yè),也

開始積累自己的數(shù)據(jù)。

1.1.2數(shù)據(jù)平臺購買的數(shù)據(jù)

數(shù)據(jù)平臺是以數(shù)據(jù)交易為主營業(yè)務(wù)的平臺,例如,數(shù)據(jù)堂、國云數(shù)據(jù)市場、貴陽大數(shù)據(jù)交易

所等數(shù)據(jù)平臺。

在各個數(shù)據(jù)交易平臺上購買各行各業(yè)各種類型的數(shù)據(jù),根據(jù)數(shù)據(jù)信息、獲取難易程度的不同,

價格也會有所不同。

Python網(wǎng)咯爬蟲實戰(zhàn).indd12022/2/1711:09:53

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

1.1.3政府/機(jī)構(gòu)公開的數(shù)據(jù)

政府和機(jī)構(gòu)也會公開一些數(shù)據(jù),成為業(yè)內(nèi)權(quán)威信息的來源。例如,中華人民共和國國家統(tǒng)

計局?jǐn)?shù)據(jù)、中國人民銀行調(diào)查統(tǒng)計、世界銀行公開數(shù)據(jù)、聯(lián)合國數(shù)據(jù)、納斯達(dá)克數(shù)據(jù)、新浪財

經(jīng)美股實時行情等。這些數(shù)據(jù)通常都是各地政府統(tǒng)計上報,或者由行業(yè)內(nèi)專業(yè)的網(wǎng)站、機(jī)構(gòu)等

提供。

1.1.4數(shù)據(jù)管理咨詢公司的數(shù)據(jù)

數(shù)據(jù)管理咨詢公司為了提供專業(yè)的咨詢服務(wù),會收集和提供與特定業(yè)務(wù)相關(guān)的數(shù)據(jù)作為支撐。

這些管理咨詢公司數(shù)量眾多,如麥肯錫、埃森哲、尼爾森、艾瑞咨詢等。通常,這樣的公司都有

龐大的數(shù)據(jù)團(tuán)隊,一般通過市場調(diào)研、問卷調(diào)查、固定的樣本檢測、與各行各業(yè)的其他公司合作、

專家對話來獲取數(shù)據(jù),并根據(jù)客戶需求制定商業(yè)解決方案。

1.1.5爬取的網(wǎng)絡(luò)數(shù)據(jù)

如果數(shù)據(jù)市場上沒有需要的數(shù)據(jù),或者價格太高不愿意購買,可以利用爬蟲技術(shù),爬取網(wǎng)站

上的數(shù)據(jù)。

無論是搜索引擎,還是個人或單位獲取目標(biāo)數(shù)據(jù),都需要從公開網(wǎng)站上爬取大量數(shù)據(jù),在此

需求下,爬蟲技術(shù)應(yīng)運(yùn)而生,并迅速發(fā)展成為一門成熟的技術(shù)。

1.2爬蟲的概念

網(wǎng)絡(luò)爬蟲又稱網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間經(jīng)常稱為網(wǎng)頁追逐者。

視頻

如果把互聯(lián)網(wǎng)比作一張大的蜘蛛網(wǎng),那么一臺計算機(jī)上的數(shù)據(jù)就是蜘蛛網(wǎng)上的一個

獵物,而爬蟲程序就是一只小蜘蛛,沿著蜘蛛網(wǎng)抓取自己想要的獵物數(shù)據(jù)。

這里的數(shù)據(jù)是指互聯(lián)網(wǎng)上公開的并且可以訪問到的網(wǎng)頁信息,而不是網(wǎng)站的后

臺信息(沒有權(quán)限訪問),更不是用戶注冊的信息(非公開的)。

什么是爬蟲爬蟲官方的名字叫數(shù)據(jù)采集,英文一般稱作Spider,就是通過編程來全自動地

從互聯(lián)網(wǎng)上采集數(shù)據(jù)。人們常用的搜索引擎就是一種爬蟲,爬蟲需要做的就是模擬

正常的網(wǎng)絡(luò)請求,例如,在網(wǎng)站上點(diǎn)擊一個網(wǎng)址,就是一次網(wǎng)絡(luò)請求。

Python爬蟲是用Python編程語言實現(xiàn)的網(wǎng)絡(luò)爬蟲,主要用于網(wǎng)絡(luò)數(shù)據(jù)的爬取和處理。相比于

其他語言,Python是一門非常適合開發(fā)網(wǎng)絡(luò)爬蟲的編程語言,它具有大量內(nèi)置包,可以輕松地實

現(xiàn)網(wǎng)絡(luò)爬蟲功能。

1.3爬蟲的用途

Python爬蟲可以做的事情很多,如搜索數(shù)據(jù)、采集數(shù)據(jù)、廣告過濾等,還可以用于數(shù)據(jù)分析,

在數(shù)據(jù)的爬取方面作用非常大。下面通過一張圖來總結(jié)網(wǎng)絡(luò)爬蟲的常用功能,如圖1-1所示。

2

Python網(wǎng)咯爬蟲實戰(zhàn).indd22022/2/1711:09:53

第1章網(wǎng)絡(luò)爬蟲概述

搜索引擎爬取圖片

爬取用戶公開聯(lián)系網(wǎng)絡(luò)爬取網(wǎng)站用戶公開

方式,進(jìn)行營銷爬蟲信息,進(jìn)行分析

收集金融信息做

投資分析自動去除網(wǎng)頁廣告

圖1-1爬蟲的常用功能

(1)通過網(wǎng)絡(luò)爬蟲可以代替手工完成很多事情。例如,使用網(wǎng)絡(luò)爬蟲搜集金融領(lǐng)域的數(shù)據(jù)資

源,將金融經(jīng)濟(jì)的發(fā)展與相關(guān)數(shù)據(jù)進(jìn)行集中處理,能夠為金融領(lǐng)域的各個方面(如經(jīng)濟(jì)發(fā)展趨勢、

金融投資、風(fēng)險分析等)提供“數(shù)據(jù)平臺”。

(2)瀏覽網(wǎng)頁上的信息時,會看到上面有很多廣告信息,十分?jǐn)_人。這時,可以利用網(wǎng)絡(luò)爬

蟲將網(wǎng)頁上的信息全部爬取下來,自動過濾掉這些廣告,便于對信息的閱讀。

(3)大數(shù)據(jù)時代,要進(jìn)行數(shù)據(jù)分析,首先要有數(shù)據(jù)源,而學(xué)習(xí)爬蟲,可以讓人們獲取更多的

數(shù)據(jù)源,并且這些數(shù)據(jù)源可以按人們的目的進(jìn)行采集,去掉很多無關(guān)數(shù)據(jù)。

從某個網(wǎng)站中購買商品時,需要知道諸如暢銷品牌、價格走勢等信息。對于非網(wǎng)站管理員而言,

手動統(tǒng)計是一個很大的工程。這時,可以利用網(wǎng)絡(luò)爬蟲輕松地采集到這些數(shù)據(jù),以便做出進(jìn)一步的

分析。

(4)推銷一些理財產(chǎn)品時,需要找到一些目標(biāo)客戶和他們的聯(lián)系方式。這時,可以利用網(wǎng)絡(luò)

爬蟲設(shè)置對應(yīng)的規(guī)則,自動從互聯(lián)網(wǎng)中采集目標(biāo)用戶的聯(lián)系方式等,以進(jìn)行營銷使用。

(5)從互聯(lián)網(wǎng)中采集信息是一項重要的工作,如果單純地靠人力進(jìn)行信息采集,不僅低效煩瑣,

而且消耗成本高。爬蟲的出現(xiàn)在一定程度上代替了手工訪問網(wǎng)頁,實現(xiàn)自動化采集互聯(lián)網(wǎng)的數(shù)據(jù),

從而更高效地利用互聯(lián)網(wǎng)中的有效信息。

1.4爬蟲的組成

網(wǎng)絡(luò)爬蟲由控制節(jié)點(diǎn)、爬蟲節(jié)點(diǎn)、資源庫組成。網(wǎng)絡(luò)爬蟲中可以有多個控制節(jié)點(diǎn),每個控制

節(jié)點(diǎn)下有多個爬蟲節(jié)點(diǎn),控制節(jié)點(diǎn)之間可以互相通信,同時,控制節(jié)點(diǎn)和其下的各爬蟲節(jié)點(diǎn)之間

也可以進(jìn)行相互通信,如圖1-2所示。

(1)控制節(jié)點(diǎn):也稱為爬蟲的中央控制器,主要負(fù)責(zé)根據(jù)URL地址分配線程,并調(diào)用爬蟲節(jié)

點(diǎn)進(jìn)行具體的爬行。

(2)爬蟲節(jié)點(diǎn):按照設(shè)置的算法,對網(wǎng)頁進(jìn)行具體的爬行,主要包括下載網(wǎng)頁以及對網(wǎng)頁的

文本進(jìn)行處理,爬行后,會將對應(yīng)的爬行結(jié)果存儲到對應(yīng)的資源庫中。

3

Python網(wǎng)咯爬蟲實戰(zhàn).indd32022/2/1711:09:53

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

爬蟲節(jié)點(diǎn)

爬蟲節(jié)點(diǎn)

爬蟲節(jié)點(diǎn)

爬蟲節(jié)點(diǎn)爬蟲節(jié)點(diǎn)控制節(jié)點(diǎn)控制節(jié)點(diǎn)

控制節(jié)點(diǎn)控制節(jié)點(diǎn)

爬蟲節(jié)點(diǎn)

爬蟲節(jié)點(diǎn)

爬蟲節(jié)點(diǎn)爬蟲節(jié)點(diǎn)

圖1-2網(wǎng)絡(luò)爬蟲的控制節(jié)點(diǎn)和爬蟲節(jié)點(diǎn)的結(jié)構(gòu)關(guān)系

1.5爬蟲的類型

通??梢园凑詹煌木S度對網(wǎng)絡(luò)爬蟲進(jìn)行分類,例如,按照使用場景,可將爬蟲分為通用爬

蟲和聚焦爬蟲;按照爬取形式,可分為累積式爬蟲和增量式爬蟲;按照爬取數(shù)據(jù)的存在方式,可分

為表層爬蟲和深層爬蟲。在實際應(yīng)用中,網(wǎng)絡(luò)爬蟲系統(tǒng)通常是這幾類爬蟲的組合體。

1.5.1通用爬蟲

通用爬蟲是搜索引擎爬取系統(tǒng)(如Baidu.、Google、Yahoo等)的重要組成部分,主要目的是

將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地,形成一個互聯(lián)網(wǎng)內(nèi)容的鏡像備份。聚焦爬蟲是“面向特定主題需求”

的一種網(wǎng)絡(luò)爬蟲程序。

通用網(wǎng)絡(luò)爬蟲又稱全網(wǎng)爬蟲(ScalableWebCrawler),爬行對象從一些種子URL擴(kuò)充到整個

Web,主要為門戶站點(diǎn)搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)。由于商業(yè)原因,它們的技術(shù)

細(xì)節(jié)很少公布出來。這類網(wǎng)絡(luò)爬蟲的爬行范圍和數(shù)量巨大,對于爬行速度和存儲空間要求較高,

對于爬行頁面的順序要求相對較低,同時由于待刷新的頁面太多,通常采用并行工作方式,但需

要較長時間才能刷新一次頁面。通用網(wǎng)絡(luò)爬蟲適用于為搜索引擎搜索廣泛的主題,有較強(qiáng)的應(yīng)用

價值。

通用網(wǎng)絡(luò)爬蟲的結(jié)構(gòu)大致可以分為頁面爬行模塊、頁面分析模塊、鏈接過濾模塊、頁面數(shù)據(jù)庫、

URL隊列、初始URL集合幾部分。為了提高工作效率,通用網(wǎng)絡(luò)爬蟲會采取一定的爬行策略。常

用的爬行策略有深度優(yōu)先策略、廣度優(yōu)先策略。

(1)深度優(yōu)先策略:其基本方法是按照深度由低到高的順序,依次訪問下一級網(wǎng)頁鏈接,直到

4

Python網(wǎng)咯爬蟲實戰(zhàn).indd42022/2/1711:09:53

第1章網(wǎng)絡(luò)爬蟲概述

不能再深入為止。爬蟲在完成一個爬行分支后返回到上一鏈接節(jié)點(diǎn)進(jìn)一步搜索其他鏈接。當(dāng)所有

鏈接遍歷完后,爬行任務(wù)結(jié)束。這種策略比較適合垂直搜索或站內(nèi)搜索,但爬行頁面內(nèi)容層次較深

的站點(diǎn)時會造成資源的巨大浪費(fèi)。

(2)廣度優(yōu)先策略:此策略按照網(wǎng)頁內(nèi)容目錄層次深淺來爬行頁面,處于較淺目錄層次的頁面

首先被爬行。當(dāng)同一層次中的頁面爬行完畢后,爬蟲再深入下一層繼續(xù)爬行。這種策略能夠有效

控制頁面的爬行深度,避免遇到一個無窮深層分支時無法結(jié)束爬行的問題,實現(xiàn)方便,無須存儲

大量中間節(jié)點(diǎn),不足之處在于需要較長時間才能爬行到目錄層次較深的頁面。

1.5.2聚焦爬蟲

聚焦爬蟲又稱主題網(wǎng)絡(luò)爬蟲,是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)的頁面的網(wǎng)

絡(luò)爬蟲。與通用爬蟲相比,聚焦爬蟲只需要爬行與主題相關(guān)的頁面,從而極大地節(jié)省了硬件和網(wǎng)

絡(luò)資源;保存的頁面也由于數(shù)量少而更新快,可以很好地滿足一些特定人群對特定領(lǐng)域信息的

需求。

聚焦網(wǎng)絡(luò)爬蟲和通用網(wǎng)絡(luò)爬蟲相比,增加了鏈接評價模塊以及內(nèi)容評價模塊。聚焦爬蟲爬行

策略實現(xiàn)的關(guān)鍵是評價頁面內(nèi)容和鏈接的重要性,不同的方法計算出的重要性不同,由此導(dǎo)致鏈

接的訪問順序也不同。

(1)基于內(nèi)容評價的爬行策略:DeBra將文本相似度的計算方法引入到網(wǎng)絡(luò)爬蟲中,提出了

FishSearch算法,它將用戶輸入的查詢詞作為主題,包含查詢詞的頁面被視為與主題相關(guān),其局

限性在于無法評價頁面與主題相關(guān)度的高低。Herseovic對FishSearch算法進(jìn)行了改進(jìn),提出了

Sharksearch算法,利用空間向量模型計算頁面與主題的相關(guān)度大小。

(2)基于鏈接結(jié)構(gòu)評價的爬行策略:Web頁面作為一種半結(jié)構(gòu)化文檔,包含很多結(jié)構(gòu)信息,

可用來評價鏈接的重要性。PageRank算法最初用于搜索引擎信息檢索中對查詢結(jié)果進(jìn)行排序,也

可用于評價鏈接的重要性,具體做法就是每次選擇PageRank值較大頁面中的鏈接來訪問。另一

個利用Web結(jié)構(gòu)評價鏈接價值的方法是HITS(Hyperlink-InducedTopicSearch,超文本敏感標(biāo)題

搜索)方法,它通過計算每個已訪問頁面的Authority權(quán)重和Hub權(quán)重,并以此決定鏈接的訪問

順序。

(3)基于增強(qiáng)學(xué)習(xí)的爬行策略:Rennie和McCallum將增強(qiáng)學(xué)習(xí)引入聚焦爬蟲,利用貝葉斯分

類器,根據(jù)整個網(wǎng)頁文本和鏈接文本對超鏈接進(jìn)行分類,為每個鏈接計算出重要性,從而決定鏈

接的訪問順序。

(4)基于語境圖的爬行策略:Diligenti等人提出了一種通過建立語境圖(ContextGraphs)學(xué)

習(xí)網(wǎng)頁之間的相關(guān)度,訓(xùn)練一個機(jī)器學(xué)習(xí)系統(tǒng),通過該系統(tǒng)可計算當(dāng)前頁面到相關(guān)Web頁面的距

離,距離越近的頁面中的鏈接優(yōu)先訪問。印度理工大學(xué)(IIT)和IBM研究中心的研究人員開發(fā)

了一個典型的聚焦網(wǎng)絡(luò)爬蟲。該爬蟲對主題的定義既不是采用關(guān)鍵詞也不是加權(quán)矢量,而是一組

具有相同主題的網(wǎng)頁。它包含兩個重要模塊:一個是分類器,用來計算所爬行的頁面與主題的相

關(guān)度,確定是否與主題相關(guān);另一個是凈化器,用來識別通過較少鏈接連接到大量相關(guān)頁面的中

心頁面。

5

Python網(wǎng)咯爬蟲實戰(zhàn).indd52022/2/1711:09:53

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

1.5.3累積式和增量式爬蟲

1.累積式爬蟲

累積式爬蟲是指從某一個時間點(diǎn)開始,通過遍歷的方式爬取系統(tǒng)所允許存儲和處理的所有

網(wǎng)頁。在理想的軟硬件環(huán)境下,經(jīng)過足夠的運(yùn)行時間,采用累積式爬取的策略可以保證爬取到

相當(dāng)規(guī)模的網(wǎng)頁集合。但由于Web數(shù)據(jù)的動態(tài)特性,集合中網(wǎng)頁的被爬取時間點(diǎn)是不同的,頁

面被更新的情況也不同,因此累積式爬取到的網(wǎng)頁集合事實上并無法與真實環(huán)境中的網(wǎng)絡(luò)數(shù)據(jù)

保持一致。

2.增量式爬蟲

增量式爬蟲是指在具有一定量規(guī)模的網(wǎng)絡(luò)頁面集合的基礎(chǔ)上,采用更新數(shù)據(jù)的方式選取已有

集合中的過時網(wǎng)頁進(jìn)行爬取,以保證所爬取到的數(shù)據(jù)與真實網(wǎng)絡(luò)數(shù)據(jù)足夠接近。進(jìn)行增量式爬取

的前提是,系統(tǒng)已經(jīng)爬取了足夠數(shù)量的網(wǎng)絡(luò)頁面,并具有這些頁面被爬取的時間信息。

與周期性爬行和刷新頁面的網(wǎng)絡(luò)爬蟲相比,增量式爬蟲只會在需要時爬行新產(chǎn)生或發(fā)生更新

的頁面,并不重新下載沒有發(fā)生變化的頁面,可有效減少數(shù)據(jù)下載量,及時更新已爬行的網(wǎng)頁,

減少時間和空間上的耗費(fèi),但是增加了爬行算法的復(fù)雜度和實現(xiàn)難度。

面向?qū)嶋H應(yīng)用環(huán)境的網(wǎng)絡(luò)蜘蛛設(shè)計中,通常既包括累積式爬取,也包括增量式爬取。累積式

爬取一般用于數(shù)據(jù)集合的整體建立或大規(guī)模更新階段;而增量式爬取則主要針對數(shù)據(jù)集合的日常維

護(hù)與即時更新。

1.5.4表層爬蟲和深層爬蟲

Web頁面按存在方式可以分為表層網(wǎng)頁和深層網(wǎng)頁。針對這兩種網(wǎng)頁的爬蟲分別叫作表層爬

蟲和深層爬蟲。

1.表層爬蟲

爬取表層網(wǎng)頁的爬蟲叫作表層爬蟲。表層網(wǎng)頁是指傳統(tǒng)搜索引擎可以索引,以超鏈接可以到

達(dá)的靜態(tài)網(wǎng)頁為主構(gòu)成的Web頁面。

2.深層爬蟲

爬取深層網(wǎng)頁的爬蟲叫作深層爬蟲。深層網(wǎng)頁是那些大部分內(nèi)容不能通過靜態(tài)鏈接獲取的、

隱藏在搜索表單后的,只有用戶提交一些關(guān)鍵詞才能獲得的Web頁面。例如,用戶注冊后內(nèi)容才

可見的網(wǎng)頁就屬于深層網(wǎng)頁。

在互聯(lián)網(wǎng)中,深層網(wǎng)頁的數(shù)量往往比表層網(wǎng)頁的數(shù)量要多很多。

與表層網(wǎng)頁相比,深層網(wǎng)頁上的數(shù)據(jù)爬取更加困難,要采用一定的附加策略才能夠自動爬取。

爬取深層頁面,需要想辦法自動填寫好對應(yīng)的表單,所以,深層網(wǎng)絡(luò)爬蟲最重要的部分即為

表單填寫部分。

深層網(wǎng)絡(luò)爬蟲主要由URL列表、LVS列表(LVS指的是標(biāo)簽/數(shù)值集合,即填充表單的數(shù)

據(jù)源)、爬行控制器、解析器、LVS控制器、表單分析器、表單處理器、響應(yīng)分析器等部分構(gòu)成。

深層爬蟲爬行過程中最重要的部分就是表單填寫,包含兩種類型:

(1)基于領(lǐng)域知識的表單填寫:簡單地說就是建立一個填寫表單的關(guān)鍵詞庫,通過語義分析來

選取合適的關(guān)鍵詞填寫表單。

(2)基于網(wǎng)頁結(jié)構(gòu)分析的表單填寫:此方法一般無領(lǐng)域知識或僅有有限的領(lǐng)域知識,將網(wǎng)頁表

單表示成DOM樹,從中提取表單各字段的值并自動地進(jìn)行表單填寫。

6

Python網(wǎng)咯爬蟲實戰(zhàn).indd62022/2/1711:09:53

第2章

網(wǎng)頁請求原理

與爬蟲基礎(chǔ)

在第1章中,我們對網(wǎng)絡(luò)爬蟲有了初步的認(rèn)識。本章主要介紹爬蟲實現(xiàn)原理,并結(jié)合網(wǎng)頁瀏

覽的過程介紹基于HTTP請求的原理,以及HTTP抓包工具Fiddler。

2.1爬蟲實現(xiàn)原理

在第1章中我們已經(jīng)了解了爬蟲分類。不同類型的網(wǎng)絡(luò)爬

開始

蟲,其實現(xiàn)原理也是不同的,但這些實現(xiàn)原理中,會存在很多共

性。本章將分別以兩種典型的網(wǎng)絡(luò)爬蟲為例(即通用網(wǎng)絡(luò)爬蟲和

聚焦網(wǎng)絡(luò)爬蟲),講解網(wǎng)絡(luò)爬蟲的實現(xiàn)原理。初始URL

2.1.1通用爬蟲

通用爬蟲從互聯(lián)網(wǎng)中搜集網(wǎng)頁、采集信息,采集的網(wǎng)頁信息獲取網(wǎng)頁

可為搜索引擎建立索引提供支持,決定著整個引擎系統(tǒng)的內(nèi)容是

否豐富,信息是否及時,因此其性能的優(yōu)劣直接影響著搜索引擎

提取新的URL

的效果。放入URL隊列

首先看一下通用網(wǎng)絡(luò)爬蟲的實現(xiàn)原理。通用爬蟲爬取網(wǎng)頁的

流程(見圖2-1)簡要概括如下:

N滿足停止

(1)選取一部分種子URL,將這些URL放入待爬取的條件?

URL隊列。Y

(2)取出待爬取的URL,解析DNS得到主機(jī)的IP,并下載結(jié)束

URL對應(yīng)的網(wǎng)頁,存儲到已下載的網(wǎng)頁庫中,并且將這些URL

圖2-1通用爬蟲爬取網(wǎng)頁的流程

放進(jìn)已爬取的URL隊列。

Python網(wǎng)咯爬蟲實戰(zhàn).indd72022/2/1711:09:53

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

(3)分析已爬取URL隊列中的URL,并將URL放入待爬取的URL隊列,從而進(jìn)入下一個循環(huán)。

以上就是通用網(wǎng)絡(luò)爬蟲的實現(xiàn)過程與基本原理,接下來分析聚焦網(wǎng)絡(luò)爬蟲的基本原理及其實

現(xiàn)過程。

2.1.2聚焦爬蟲

聚焦爬蟲(又稱為網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中經(jīng)常稱為網(wǎng)頁追逐者),是“面

向特定主題需求”的一種網(wǎng)絡(luò)爬蟲程序,它與通用搜索引擎爬蟲的區(qū)別在于:聚焦爬蟲在實施

網(wǎng)頁爬取時會對內(nèi)容進(jìn)行處理篩選,盡量保證只爬取與需求相關(guān)的網(wǎng)頁信息。

(1)對爬取目標(biāo)的描述或定義。

(2)對網(wǎng)頁或數(shù)據(jù)的分析與過濾。

(3)對URL的搜索策略。

爬取目標(biāo)的描述和定義是決定網(wǎng)頁分析算法與URL搜索策略如何制訂的基礎(chǔ)。而網(wǎng)頁分析算

法和候選URL排序算法是決定搜索引擎所提供的服務(wù)形式和爬蟲網(wǎng)頁爬取行為的關(guān)鍵所在。這兩

部分的算法是緊密相關(guān)的。

2.2HTTP基礎(chǔ)

視頻2.2.1HTTP與HTTPS

在瀏覽網(wǎng)頁時,通常會發(fā)現(xiàn)URL的開頭有http或https,這就是訪問資源需要

的協(xié)議類型。例如,在瀏覽天貓時會發(fā)現(xiàn)瀏覽器地址欄出現(xiàn)了如圖2-2所示的URL

地址。我們還看到過ftp、sftp、?le等其他的URL開頭,它們也是協(xié)議類型。在爬

通信協(xié)議蟲里面,所爬取的頁面一般都是http或者h(yuǎn)ttps開頭的協(xié)議,這里主要介紹這兩個協(xié)議。

圖2-2天貓地址

網(wǎng)站的URL分為兩部分:通信協(xié)議和域名地址。域名地址很好理解,不同的域名地址表示網(wǎng)

站中不同的頁面;而通信協(xié)議,簡單來說就是瀏覽器和服務(wù)器之間溝通的語言。網(wǎng)站中的通信協(xié)

議一般就是HTTP協(xié)議和HTTPS協(xié)議。

HTTP(HyperTextTransferProtocol,超文本傳輸協(xié)議)是用于從網(wǎng)絡(luò)傳輸超文本數(shù)據(jù)到本地

瀏覽器的協(xié)議,它能保證高效而準(zhǔn)確地傳送超文本文檔。

一直以來HTTP協(xié)議都是最主流的網(wǎng)頁協(xié)議,但是互聯(lián)網(wǎng)發(fā)展到今天,HTTP協(xié)議的明文傳輸

會讓用戶存在一個非常大的安全隱患。試想一下,假如用戶在一個HTTP協(xié)議的網(wǎng)站上面購物,

需要在頁面上輸入銀行卡號和密碼,然后把數(shù)據(jù)提交到服務(wù)器實現(xiàn)購買。如果這時候傳輸數(shù)據(jù)被

第三者截獲了,由于HTTP明文數(shù)據(jù)傳輸?shù)脑?,用戶的卡號和密碼就會被截獲者獲得。從一定

程度上來說,HTTP協(xié)議是不安全的。

HTTPS(HyperTextTransferProtocoloverSecureSocketLayer,超文本傳輸安全協(xié)議)是以安

全為目標(biāo)的HTTP通道,是HTTP的安全版,即HTTP下加入SSL層,簡稱為HTTPS。

8

Python網(wǎng)咯爬蟲實戰(zhàn).indd82022/2/1711:09:53

第2章網(wǎng)頁請求原理與爬蟲基礎(chǔ)

HTTPS協(xié)議可以理解為HTTP協(xié)議的升級,就是在HTTP的基礎(chǔ)上增加了數(shù)據(jù)加密。在數(shù)據(jù)

進(jìn)行傳輸之前,對數(shù)據(jù)進(jìn)行加密,然后再發(fā)送到服務(wù)器。這樣,就算數(shù)據(jù)被第三者所截獲,但是

由于數(shù)據(jù)是加密的,所以個人信息是安全的。這就是HTTP和HTTPS的最大區(qū)別。

目前國內(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瀏覽器訪問一個HTTP網(wǎng)站時,仔細(xì)觀察會發(fā)現(xiàn)瀏覽器對所訪問的HTTP網(wǎng)站

會顯示如圖2-3所示的“不安全”的安全警告,提示用戶當(dāng)前所訪問的網(wǎng)站可能會存在風(fēng)險。而訪

問HTTPS網(wǎng)站時,情況是完全不一樣的。

圖2-3安全警告

除了瀏覽器視覺上不同以外,HTTPS網(wǎng)站最重要的就是可以提升搜索排名。百度和谷歌已經(jīng)

明確表示,HTTPS網(wǎng)站將會作為搜索排名的一個重要權(quán)重指標(biāo)。也就是說,HTTPS網(wǎng)站比HTTP

網(wǎng)站在搜索排名中更有優(yōu)勢。

2.2.2HTTP請求過程

瀏覽器的主要功能是向服務(wù)器發(fā)出請求,并在窗口中顯示選擇的網(wǎng)絡(luò)資源。HTTP是一套計算

機(jī)通過網(wǎng)絡(luò)進(jìn)行通信的規(guī)則,它由兩部分組成:客戶端請求消息和服務(wù)器端響應(yīng)消息,通信過程如

圖2-4所示。

請求

響應(yīng)

客戶機(jī)服務(wù)器

圖2-4HTTP通信過程

這里的客戶機(jī)代表PC或手機(jī)瀏覽器,服務(wù)器即是要訪問的網(wǎng)站所在的服務(wù)器。

當(dāng)用戶在瀏覽器的地址欄中輸入一個URL地址并按【Enter】鍵之后,瀏覽器會向HTTP服務(wù)

器發(fā)送HTTP請求。常用的HTTP請求包括GET和POST兩種方式。

視頻

2.2.3客戶端請求

從圖2-4可以看出,請求由客戶機(jī)向服務(wù)器發(fā)出,根據(jù)HTTP協(xié)議的規(guī)定,客

戶機(jī)發(fā)送一個HTTP請求到服務(wù)器的請求消息,由請求行、請求頭部、空行以及請

求包體(數(shù)據(jù))四部分組成。圖2-5所示為請求消息的一般格式。客戶端

9

Python網(wǎng)咯爬蟲實戰(zhàn).indd92022/2/1711:09:53

Python網(wǎng)絡(luò)爬蟲實戰(zhàn)

請求方法空格URL空格協(xié)議版本回車符換行符請求行

頭部字段名稱:(冒號)值回車符換行符

請求頭部

頭部字段名稱:(冒號)值回車符換行符

溫馨提示

  • 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

提交評論