《Python網(wǎng)絡(luò)爬蟲案例實(shí)戰(zhàn)》介紹如何利用Python開發(fā)網(wǎng)絡(luò)爬蟲,實(shí)用性較強(qiáng)。《Python網(wǎng)絡(luò)爬蟲案例實(shí)戰(zhàn)》以案例項(xiàng)目為驅(qū)動(dòng),由淺入深地講解爬蟲開發(fā)中所需要的知識(shí)和技能。從靜態(tài)網(wǎng)站到動(dòng)態(tài)網(wǎng)站,從單機(jī)爬蟲到分布式爬蟲,既包含基礎(chǔ)知識(shí)點(diǎn),又講解了關(guān)鍵問(wèn)題和重難點(diǎn)問(wèn)題,包含從入門到進(jìn)階的所有知識(shí)!禤ython網(wǎng)絡(luò)爬蟲案例實(shí)戰(zhàn)》主要包括爬蟲網(wǎng)絡(luò)概述、Web前端、靜態(tài)網(wǎng)絡(luò)抓取、動(dòng)態(tài)網(wǎng)頁(yè)抓取、解析網(wǎng)頁(yè)、Python并發(fā)、數(shù)據(jù)庫(kù)、反爬蟲、亂碼問(wèn)題、登錄與驗(yàn)證碼、采集服務(wù)器、基礎(chǔ)爬蟲、App爬取、分布式爬蟲、爬蟲的綜合實(shí)戰(zhàn)等內(nèi)容。
《Python網(wǎng)絡(luò)爬蟲案例實(shí)戰(zhàn)》適合Python初學(xué)者,也適合研究Python的廣大科研人員、學(xué)者、工程技術(shù)人員。
人類社會(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ù)量龐大、種類繁多、隨時(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ò)爬蟲就是一種高效的信息采集技術(shù),利用它可以快速、準(zhǔn)確地采集人們想要的各種數(shù)據(jù)資源。因此,可以說(shuō),網(wǎng)絡(luò)爬蟲技術(shù)已成為大數(shù)據(jù)時(shí)代IT從業(yè)者的必修課程。
在互聯(lián)網(wǎng)時(shí)代,強(qiáng)大的爬蟲技術(shù)造就了很多偉大的搜索引擎公司,使人類的搜索能力得到了巨大的延展。今天在移動(dòng)互聯(lián)網(wǎng)時(shí)代,爬蟲技術(shù)仍然是支撐一些信息融合應(yīng)用(如“今日頭條”)的關(guān)鍵技術(shù)。但是,今天爬蟲技術(shù)面臨著更大的挑戰(zhàn),與互聯(lián)網(wǎng)的共享機(jī)制不同,很多資源只有在登錄之后才能訪問(wèn),還采取了各種反爬蟲措施,這就讓爬蟲不那么容易訪問(wèn)這些資源。網(wǎng)絡(luò)爬蟲與反爬蟲措施是矛與盾的關(guān)系,網(wǎng)絡(luò)爬蟲技術(shù)就是在這種針鋒相對(duì)、見招拆招的不斷斗爭(zhēng)中,逐漸完善和發(fā)展起來(lái)的。無(wú)論是產(chǎn)品還是研究,都需要大量的優(yōu)質(zhì)數(shù)據(jù)來(lái)使機(jī)器更加智能。因此,在這個(gè)時(shí)代,從業(yè)者急需一本全面介紹爬蟲技術(shù)的書,因此本書就誕生了。
本書介紹了基于Python 3進(jìn)行網(wǎng)絡(luò)爬取的各項(xiàng)技術(shù),如環(huán)境配置、理論基礎(chǔ)進(jìn)階實(shí)戰(zhàn)、分布式規(guī)模采集等,詳細(xì)介紹了網(wǎng)絡(luò)爬蟲開發(fā)過(guò)程中需要了解的知識(shí)點(diǎn),并通過(guò)多個(gè)案例介紹了不同場(chǎng)景下采用不同爬蟲技術(shù)實(shí)現(xiàn)數(shù)據(jù)爬取的過(guò)程。
1. 本書特色
深入淺出。本書是一本適合初學(xué)者的書箱,既有對(duì)基礎(chǔ)知識(shí)點(diǎn)的講解,也涉及關(guān)鍵問(wèn)題和重點(diǎn)難點(diǎn)的分析和解決。
圖文并茂。本書每章節(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à)值高。書中所有的代碼都提供了免費(fèi)資源,使讀者學(xué)習(xí)更方便,而且隨著圖書內(nèi)容的推進(jìn),項(xiàng)目不斷趨近于工程化,具有很高的應(yīng)用價(jià)值和參考性。
2. 本書主要內(nèi)容
全書共15章。
第1章介紹了爬蟲網(wǎng)絡(luò)的基本概述,主要包括HTTP基本原理、網(wǎng)頁(yè)基礎(chǔ)知識(shí)、網(wǎng)絡(luò)爬蟲合法性、網(wǎng)絡(luò)爬蟲技術(shù)等內(nèi)容。
第2章介紹了Python平臺(tái)及Web前端,主要包括Python軟件的介紹及安裝、數(shù)據(jù)類型、面向?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反爬蟲,主要包括為什么會(huì)被反爬蟲、反爬蟲的方式有哪些、怎樣“反反爬蟲”等內(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ǔ)爬蟲,主要包括架構(gòu)及流程、URL管理器、HTML下載器及HTML解析器等內(nèi)容。
第13章介紹了Python的App爬取,主要包括Charles爬取、Appium爬取、API爬取等內(nèi)容。
第14章介紹了Python分布式爬蟲,主要包括主從模式、爬蟲節(jié)點(diǎn)Redis、操作RabbitMQ等內(nèi)容。
第15章介紹了爬蟲的綜合實(shí)戰(zhàn),主要包括Email提醒、爬取mp3資源信息、創(chuàng)建“云起書院”爬蟲以及使用代理爬取微信公眾號(hào)文章等內(nèi)容。
由于時(shí)間倉(cāng)促,加之作者水平有限,錯(cuò)誤和疏漏之處在所難免。在此,誠(chéng)懇地期望得到各領(lǐng)域的專家和廣大讀者的批評(píng)指正,請(qǐng)發(fā)送郵件到workemail6@163.com。本書提供的程序代碼、習(xí)題答案等資料,請(qǐng)掃描下方二維碼或者在清華大學(xué)出版社官方網(wǎng)站本書頁(yè)面下載。
程序代碼
習(xí)題答案
編者
2020年10月
第1章爬蟲網(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)樹及節(jié)點(diǎn)間的關(guān)系
1.2.3選擇器
1.3網(wǎng)絡(luò)爬蟲合法性
1.3.1Robots協(xié)議
1.3.2網(wǎng)絡(luò)爬蟲的約束
1.4網(wǎng)絡(luò)爬蟲技術(shù)
1.4.1網(wǎng)絡(luò)爬蟲的概述
1.4.2網(wǎng)絡(luò)爬蟲原理
1.4.3網(wǎng)絡(luò)爬蟲系統(tǒng)的工作原理
1.4.4Python爬蟲的架構(gòu)
1.4.5爬蟲對(duì)互聯(lián)網(wǎng)進(jìn)行劃分
1.5爬取策略
1.6爬蟲網(wǎng)絡(luò)更新策略
1.7會(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常見誤區(qū)
1.8代理的基本原理
1.8.1基本原理
1.8.2代理的作用
1.8.3爬蟲代理
1.8.4代理分類
1.8.5常見代理設(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的入門
2.3.1基本命令
2.3.2數(shù)據(jù)類型
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類定義
2.5.3類對(duì)象
2.5.4類的方法
2.5.5繼承
2.6第一個(gè)爬蟲實(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爬蟲實(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反爬蟲
8.1為什么會(huì)被反爬蟲
8.2反爬蟲的方式有哪些
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怎樣“反反爬蟲”
8.3.1修改請(qǐng)求頭
8.3.2修改爬蟲訪問(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à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ī)模爬蟲的需要
11.1.2防止IP地址被封殺
11.2動(dòng)態(tài)IP撥號(hào)服務(wù)器
11.2.1購(gòu)買撥號(hào)服務(wù)器
11.2.2登錄服務(wù)器
11.2.3Python更換IP
11.2.4爬蟲與更換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ǔ)爬蟲
12.1架構(gòu)及流程
12.2URL管理器
12.3HTML下載器
12.4HTML解析器
12.5數(shù)據(jù)存儲(chǔ)器
12.6爬蟲調(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分布式爬蟲
14.1主從模式
14.1.1URL管理器
14.1.2數(shù)據(jù)存儲(chǔ)器
14.1.3控制調(diào)度器
14.2爬蟲節(jié)點(diǎn)
14.2.1HTML下載器
14.2.2HTML解析器
14.2.3爬蟲調(diào)度器
14.3Redis
14.3.1Redis的安裝
14.3.2Redis的配置
14.3.3數(shù)據(jù)類型
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章爬蟲的綜合實(shí)戰(zhàn)
15.1Email提醒
15.2爬取mp3資源信息
15.3創(chuàng)建云起書院爬蟲
15.4使用代理爬取微信公眾號(hào)文章
參考文獻(xiàn)