人類(lèi)社會(huì)已經(jīng)進(jìn)入大數(shù)據(jù)時(shí)代,大數(shù)據(jù)深刻改變著人們的工作和生活。隨著互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)社交網(wǎng)絡(luò)等的迅猛發(fā)展,各種數(shù)量龐大、種類(lèi)繁多、隨時(shí)隨地產(chǎn)生和更新的大數(shù)據(jù),蘊(yùn)含著前所未有的社會(huì)價(jià)值和商業(yè)價(jià)值。對(duì)大數(shù)據(jù)的獲取、處理和分析,以及基于大數(shù)據(jù)的智能應(yīng)用,已成為提高未來(lái)競(jìng)爭(zhēng)力的關(guān)鍵要素。
但如何獲取這些寶貴數(shù)據(jù)呢?網(wǎng)絡(luò)爬蟲(chóng)就是一種高效的信息采集技術(shù),利用它可以快速、準(zhǔn)確地采集人們想要的各種數(shù)據(jù)資源。因此,可以說(shuō),網(wǎng)絡(luò)爬蟲(chóng)技術(shù)已成為大數(shù)據(jù)時(shí)代IT從業(yè)者的必修課程。
在互聯(lián)網(wǎng)時(shí)代,強(qiáng)大的爬蟲(chóng)技術(shù)造就了很多偉大的搜索引擎公司,使人類(lèi)的搜索能力得到了巨大的延展。今天在移動(dòng)互聯(lián)網(wǎng)時(shí)代,爬蟲(chóng)技術(shù)仍然是支撐一些信息融合應(yīng)用(如“今日頭條”)的關(guān)鍵技術(shù)。但是,今天爬蟲(chóng)技術(shù)面臨著更大的挑戰(zhàn),與互聯(lián)網(wǎng)的共享機(jī)制不同,很多資源只有在登錄之后才能訪問(wèn),還采取了各種反爬蟲(chóng)措施,這就讓爬蟲(chóng)不那么容易訪問(wèn)這些資源。網(wǎng)絡(luò)爬蟲(chóng)與反爬蟲(chóng)措施是矛與盾的關(guān)系,網(wǎng)絡(luò)爬蟲(chóng)技術(shù)就是在這種針?shù)h相對(duì)、見(jiàn)招拆招的不斷斗爭(zhēng)中,逐漸完善和發(fā)展起來(lái)的。無(wú)論是產(chǎn)品還是研究,都需要大量的優(yōu)質(zhì)數(shù)據(jù)來(lái)使機(jī)器更加智能。因此,在這個(gè)時(shí)代,從業(yè)者急需一本全面介紹爬蟲(chóng)技術(shù)的書(shū),因此本書(shū)就誕生了。
本書(shū)介紹了基于Python 3進(jìn)行網(wǎng)絡(luò)爬取的各項(xiàng)技術(shù),如環(huán)境配置、理論基礎(chǔ)進(jìn)階實(shí)戰(zhàn)、分布式規(guī)模采集等,詳細(xì)介紹了網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā)過(guò)程中需要了解的知識(shí)點(diǎn),并通過(guò)多個(gè)案例介紹了不同場(chǎng)景下采用不同爬蟲(chóng)技術(shù)實(shí)現(xiàn)數(shù)據(jù)爬取的過(guò)程。
1. 本書(shū)特色
深入淺出。本書(shū)是一本適合初學(xué)者的書(shū)箱,既有對(duì)基礎(chǔ)知識(shí)點(diǎn)的講解,也涉及關(guān)鍵問(wèn)題和重點(diǎn)難點(diǎn)的分析和解決。
圖文并茂。本書(shū)每章節(jié)都是理論與實(shí)踐相結(jié)合,通過(guò)文字與圖片介紹完相關(guān)理論知識(shí)點(diǎn)后,都會(huì)通過(guò)相關(guān)實(shí)戰(zhàn)來(lái)演示總結(jié),產(chǎn)生結(jié)果,并對(duì)結(jié)果進(jìn)行說(shuō)明。
具有完整的源代碼,應(yīng)用價(jià)值高。書(shū)中所有的代碼都提供了免費(fèi)資源,使讀者學(xué)習(xí)更方便,而且隨著圖書(shū)內(nèi)容的推進(jìn),項(xiàng)目不斷趨近于工程化,具有很高的應(yīng)用價(jià)值和參考性。
2. 本書(shū)主要內(nèi)容
全書(shū)共15章。
第1章介紹了爬蟲(chóng)網(wǎng)絡(luò)的基本概述,主要包括HTTP基本原理、網(wǎng)頁(yè)基礎(chǔ)知識(shí)、網(wǎng)絡(luò)爬蟲(chóng)合法性、網(wǎng)絡(luò)爬蟲(chóng)技術(shù)等內(nèi)容。
第2章介紹了Python平臺(tái)及Web前端,主要包括Python軟件的介紹及安裝、數(shù)據(jù)類(lèi)型、面向?qū)ο缶幊碳癢eb前端等內(nèi)容。
第3章介紹了靜態(tài)網(wǎng)頁(yè)抓取,主要包括Requests的安裝、獲取響應(yīng)內(nèi)容、JSON、傳遞URL參數(shù)等內(nèi)容。
第4章介紹了動(dòng)態(tài)網(wǎng)頁(yè)抓取,主要包括動(dòng)態(tài)的抓取實(shí)例、Ajax抓取、 Selenium抓取動(dòng)態(tài)網(wǎng)頁(yè)等內(nèi)容。
第5章介紹了解析網(wǎng)頁(yè),主要包括正則表達(dá)式解析網(wǎng)頁(yè)、BeautifulSoup解析網(wǎng)頁(yè)、 lxml解析網(wǎng)頁(yè)等內(nèi)容。
第6章介紹了Python并發(fā)與Web,主要包括并發(fā)和并行、同步和異步、阻塞與非阻塞、線程、隊(duì)列、進(jìn)程、協(xié)程等內(nèi)容。
第7章介紹了Python數(shù)據(jù)庫(kù)存儲(chǔ),主要包括幾種保存方法、JSON文件存儲(chǔ)、存儲(chǔ)到MongoDB數(shù)據(jù)庫(kù)等內(nèi)容。
第8章介紹了Python反爬蟲(chóng),主要包括為什么會(huì)被反爬蟲(chóng)、反爬蟲(chóng)的方式有哪些、怎樣“反反爬蟲(chóng)”等內(nèi)容。
第9章介紹了Python中文亂碼問(wèn)題,主要包括什么是字符編碼、Python的字符編碼、解決中文編碼問(wèn)題等內(nèi)容。
第10章介紹了Python登錄與驗(yàn)證碼,主要包括處理登錄表單、驗(yàn)證碼處理等內(nèi)容。
第11章介紹了Python采集服務(wù)器,主要包括使用服務(wù)器采集原因、動(dòng)態(tài)IP撥號(hào)服務(wù)器、Tor代理服務(wù)器等內(nèi)容。
第12章介紹了Python基礎(chǔ)爬蟲(chóng),主要包括架構(gòu)及流程、URL管理器、HTML下載器及HTML解析器等內(nèi)容。
第13章介紹了Python的App爬取,主要包括Charles爬取、Appium爬取、API爬取等內(nèi)容。
第14章介紹了Python分布式爬蟲(chóng),主要包括主從模式、爬蟲(chóng)節(jié)點(diǎn)Redis、操作RabbitMQ等內(nèi)容。
第15章介紹了爬蟲(chóng)的綜合實(shí)戰(zhàn),主要包括Email提醒、爬取mp3資源信息、創(chuàng)建“云起書(shū)院”爬蟲(chóng)以及使用代理爬取微信公眾號(hào)文章等內(nèi)容。
由于時(shí)間倉(cāng)促,加之作者水平有限,錯(cuò)誤和疏漏之處在所難免。在此,誠(chéng)懇地期望得到各領(lǐng)域的專(zhuān)家和廣大讀者的批評(píng)指正,請(qǐng)發(fā)送郵件到workemail6@163.com。本書(shū)提供的程序代碼、習(xí)題答案等資料,請(qǐng)掃描下方二維碼或者在清華大學(xué)出版社官方網(wǎng)站本書(shū)頁(yè)面下載。
程序代碼
習(xí)題答案
編者
2020年10月
第1章爬蟲(chóng)網(wǎng)絡(luò)概述
1.1HTTP基本原理
1.1.1URL和URL
1.1.2超文本
1.1.3HTTP和HTTPS
1.1.4HTTP請(qǐng)求過(guò)程
1.1.5請(qǐng)求
1.1.6響應(yīng)
1.2網(wǎng)頁(yè)基礎(chǔ)
1.2.1網(wǎng)頁(yè)的組成
1.2.2節(jié)點(diǎn)樹(shù)及節(jié)點(diǎn)間的關(guān)系
1.2.3選擇器
1.3網(wǎng)絡(luò)爬蟲(chóng)合法性
1.3.1Robots協(xié)議
1.3.2網(wǎng)絡(luò)爬蟲(chóng)的約束
1.4網(wǎng)絡(luò)爬蟲(chóng)技術(shù)
1.4.1網(wǎng)絡(luò)爬蟲(chóng)的概述
1.4.2網(wǎng)絡(luò)爬蟲(chóng)原理
1.4.3網(wǎng)絡(luò)爬蟲(chóng)系統(tǒng)的工作原理
1.4.4Python爬蟲(chóng)的架構(gòu)
1.4.5爬蟲(chóng)對(duì)互聯(lián)網(wǎng)進(jìn)行劃分
1.5爬取策略
1.6爬蟲(chóng)網(wǎng)絡(luò)更新策略
1.7會(huì)話(huà)和Cookie
1.7.1靜態(tài)網(wǎng)頁(yè)和動(dòng)態(tài)網(wǎng)頁(yè)
1.7.2無(wú)狀態(tài)HTTP
1.7.3常見(jiàn)誤區(qū)
1.8代理的基本原理
1.8.1基本原理
1.8.2代理的作用
1.8.3爬蟲(chóng)代理
1.8.4代理分類(lèi)
1.8.5常見(jiàn)代理設(shè)置
1.9習(xí)題
第2章Python平臺(tái)及Web前端
2.1Python軟件概述
2.2Python的安裝
2.2.1在Linux系統(tǒng)中搭建Python環(huán)境
2.2.2在Windows系統(tǒng)中搭建Python環(huán)境
2.2.3使用pip安裝第三方庫(kù)
2.3Python的入門(mén)
2.3.1基本命令
2.3.2數(shù)據(jù)類(lèi)型
2.4條件語(yǔ)句與循環(huán)語(yǔ)句
2.4.1條件語(yǔ)句
2.4.2循環(huán)語(yǔ)句
2.5面向?qū)ο缶幊?/p>
2.5.1面向?qū)ο蠹夹g(shù)簡(jiǎn)介
2.5.2類(lèi)定義
2.5.3類(lèi)對(duì)象
2.5.4類(lèi)的方法
2.5.5繼承
2.6第一個(gè)爬蟲(chóng)實(shí)例
2.7Web前端
2.8習(xí)題
第3章靜態(tài)網(wǎng)頁(yè)爬取
3.1Requests的安裝
3.2獲取響應(yīng)內(nèi)容
3.3JSON數(shù)據(jù)庫(kù)
3.3.1JSON的使用
3.3.2爬取抽屜網(wǎng)信息
3.4傳遞URL參數(shù)
3.5獲取響應(yīng)內(nèi)容
3.6獲取網(wǎng)頁(yè)編碼
3.7定制請(qǐng)求頭
3.8發(fā)送POST請(qǐng)求
3.9設(shè)置超時(shí)
3.10代理訪問(wèn)
3.11自定義請(qǐng)求頭部
3.12Requests爬蟲(chóng)實(shí)踐
3.12.1狀態(tài)碼521網(wǎng)頁(yè)的爬取
3.12.2TOP250電影數(shù)據(jù)
3.13習(xí)題
第4章動(dòng)態(tài)網(wǎng)頁(yè)爬取
4.1動(dòng)態(tài)爬取淘寶網(wǎng)實(shí)例
4.2什么是Ajax
4.2.1Ajax分析
4.2.2Ajax結(jié)果提取
4.2.3Ajax爬取今日頭條街拍美圖
4.3解析真實(shí)地址爬取
4.4selenium爬取動(dòng)態(tài)網(wǎng)頁(yè)
4.4.1安裝selenium
4.4.2爬取百度表情包
4.5爬取去哪兒網(wǎng)
4.6習(xí)題
第5章解析網(wǎng)頁(yè)
5.1獲取豆瓣電影
5.2正則表達(dá)式解析網(wǎng)頁(yè)
5.2.1字符串匹配
5.2.2起始位置匹配字符串
5.2.3所有子串匹配
5.2.4Requests爬取貓眼電影排行
5.3BeautifulSoup解析網(wǎng)頁(yè)
5.4PyQuery解析庫(kù)
5.4.1使用PyQuery
5.4.2PyQuery爬取煎蛋網(wǎng)商品圖片
5.5lxml解析網(wǎng)頁(yè)
5.5.1使用lxml
5.5.2文件讀取
5.5.3XPath使用
5.5.4爬取LOL百度貼吧圖片
5.6爬取二手房網(wǎng)站數(shù)據(jù)
5.7習(xí)題
第6章并發(fā)與Web
6.1并發(fā)和并行、同步和異步、阻塞與非阻塞
6.1.1并發(fā)和并行
6.1.2同步與異步
6.1.3阻塞與非阻塞
6.2線程
6.2.1線程模塊
6.2.2使用Threading模塊創(chuàng)建線程
6.2.3線程同步
6.2.4線程池在Web編程的應(yīng)用
6.3隊(duì)列
6.4進(jìn)程
6.4.1進(jìn)程與線程的歷史
6.4.2進(jìn)程與線程之間的關(guān)系
6.4.3進(jìn)程與進(jìn)程池
6.5協(xié)程
6.5.1協(xié)程的生成器的基本行為
6.5.2協(xié)程的4個(gè)狀態(tài)
6.5.3終止協(xié)程和異常處理
6.5.4顯式地將異常發(fā)給協(xié)程
6.5.5yield from獲取協(xié)程的返回值
6.5.6協(xié)程案例分析
6.6分布式進(jìn)程案例分析
6.7網(wǎng)絡(luò)編程
6.7.1TCP編程
6.7.2UDP編程
6.8習(xí)題
第7章Python數(shù)據(jù)庫(kù)存儲(chǔ)
7.1幾種保存方法
7.1.1Open函數(shù)保存
7.1.2pandas包保存
7.1.3CSV模塊保存
7.1.4numpy包保存
7.2JSON文件存儲(chǔ)
7.2.1對(duì)象和數(shù)組
7.2.2讀取JSON
7.2.3讀JSON文件
7.2.4輸出JSON
7.3存儲(chǔ)到MongoDB數(shù)據(jù)庫(kù)
7.3.1MongoDB的特點(diǎn)
7.3.2下載安裝MongoDB
7.3.3配置 MongoDB 服務(wù)
7.3.4創(chuàng)建數(shù)據(jù)庫(kù)
7.4爬取虎撲論壇帖子
7.5習(xí)題
第8章Python反爬蟲(chóng)
8.1為什么會(huì)被反爬蟲(chóng)
8.2反爬蟲(chóng)的方式有哪些
8.2.1不返回網(wǎng)頁(yè)
8.2.2返回?cái)?shù)據(jù)非目標(biāo)網(wǎng)頁(yè)
8.2.3獲取數(shù)據(jù)變難
8.3怎樣“反反爬蟲(chóng)”
8.3.1修改請(qǐng)求頭
8.3.2修改爬蟲(chóng)訪問(wèn)周期
8.3.3使用代理
8.4習(xí)題
第9章Python中文亂碼問(wèn)題
9.1什么是字符編碼
9.2Python的字符編碼
9.3解決中文編碼問(wèn)題
9.4網(wǎng)頁(yè)使用gzip壓縮
9.5Python讀寫(xiě)文件中出現(xiàn)亂碼
9.6Matplotlib中文亂碼問(wèn)題
9.7習(xí)題
第10章Python登錄與驗(yàn)證碼
10.1登錄表單
10.1.1處理登錄表單
10.1.2處理Cookie
10.1.3完整的登錄代碼
10.2驗(yàn)證碼處理
10.2.1如何使用驗(yàn)證碼驗(yàn)證
10.2.2人工方法處理驗(yàn)證碼
10.2.3OCR處理驗(yàn)證碼
10.3極驗(yàn)滑動(dòng)驗(yàn)證碼的識(shí)別案例
10.4點(diǎn)觸驗(yàn)證碼的識(shí)別案例
10.5習(xí)題
第11章Python采集服務(wù)器
11.1使用服務(wù)器采集原因
11.1.1大規(guī)模爬蟲(chóng)的需要
11.1.2防止IP地址被封殺
11.2動(dòng)態(tài)IP撥號(hào)服務(wù)器
11.2.1購(gòu)買(mǎi)撥號(hào)服務(wù)器
11.2.2登錄服務(wù)器
11.2.3Python更換IP
11.2.4爬蟲(chóng)與更換IP功能結(jié)合
11.3Tor代理服務(wù)器
11.3.1安裝Tor
11.3.2使用Tor
11.3.3實(shí)現(xiàn)自動(dòng)投票
11.4習(xí)題
第12章Python基礎(chǔ)爬蟲(chóng)
12.1架構(gòu)及流程
12.2URL管理器
12.3HTML下載器
12.4HTML解析器
12.5數(shù)據(jù)存儲(chǔ)器
12.6爬蟲(chóng)調(diào)度器實(shí)現(xiàn)
12.7習(xí)題
第13章Python的App爬取
13.1Charles爬取
13.2Appium爬取
13.2.1Appium安裝
13.2.2Appium的基本使用
13.3API爬取
13.4Appium爬取微信朋友圈
13.5習(xí)題
第14章Python分布式爬蟲(chóng)
14.1主從模式
14.1.1URL管理器
14.1.2數(shù)據(jù)存儲(chǔ)器
14.1.3控制調(diào)度器
14.2爬蟲(chóng)節(jié)點(diǎn)
14.2.1HTML下載器
14.2.2HTML解析器
14.2.3爬蟲(chóng)調(diào)度器
14.3Redis
14.3.1Redis的安裝
14.3.2Redis的配置
14.3.3數(shù)據(jù)類(lèi)型
14.4Python與Redis
14.4.1連接方式
14.4.2連接池
14.4.3Redis的基本操作
14.4.4管道
14.4.5發(fā)布和訂閱
14.5操作RabbitMQ
14.5.1安裝Erlang
14.5.2安裝RabbitMQ
14.6習(xí)題
第15章爬蟲(chóng)的綜合實(shí)戰(zhàn)
15.1Email提醒
15.2爬取mp3資源信息
15.3創(chuàng)建云起書(shū)院爬蟲(chóng)
15.4使用代理爬取微信公眾號(hào)文章
參考文獻(xiàn)