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