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