解析Python網(wǎng)絡(luò)爬蟲:核心技術(shù)、Scrapy框架、分布式爬蟲
定 價(jià):52 元
叢書名:Python應(yīng)用編程叢書
- 作者:黑馬程序員 著
- 出版時(shí)間:2018/8/1
- ISBN:9787113246785
- 出 版 社:中國鐵道出版社
- 中圖法分類:TP311.561
- 頁碼:272
- 紙張:膠版紙
- 版次:1
- 開本:16開
網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則,自動(dòng)請(qǐng)求萬維網(wǎng)網(wǎng)站并提取網(wǎng)絡(luò)數(shù)據(jù)的程序或腳本,它可以代替人力進(jìn)行信息采集,能夠自動(dòng)采集并高效地利用互聯(lián)網(wǎng)中的數(shù)據(jù),在市場的應(yīng)用需求中占據(jù)著重要的位置。
本書以Windows為主要平臺(tái),系統(tǒng)全面地講解了Python網(wǎng)絡(luò)爬蟲的相關(guān)知識(shí)。主要內(nèi)容包括:初識(shí)爬蟲、爬蟲的實(shí)現(xiàn)原理和技術(shù)、網(wǎng)頁請(qǐng)求原理、爬取網(wǎng)頁數(shù)據(jù)、數(shù)據(jù)解析、并發(fā)下載、圖像識(shí)別與文字處理、存儲(chǔ)爬蟲數(shù)據(jù)、初識(shí)爬蟲框架Scrapy、Scrapy終端與核心組件、自動(dòng)爬取網(wǎng)頁的爬蟲 CrawSpider、Scrapy-Redis分布式爬蟲。
本書適合作為高等院校計(jì)算機(jī)相關(guān)專業(yè)程序設(shè)計(jì)課程教材,也可作為Python網(wǎng)絡(luò)爬蟲的培訓(xùn)教材,以及廣大編程開發(fā)者的爬蟲入門級(jí)教材。
本書結(jié)合案例講解各知識(shí)點(diǎn),幫助讀者掌握Python網(wǎng)絡(luò)爬蟲的核心技術(shù)。
網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則,自動(dòng)請(qǐng)求萬維網(wǎng)網(wǎng)站并提取網(wǎng)絡(luò)數(shù)據(jù)的程序或腳本,它可以代替人力進(jìn)行信息采集,能夠自動(dòng)采集并高效地利用互聯(lián)網(wǎng)中的數(shù)據(jù),市場的應(yīng)用需求越來越大。
Python語言的一個(gè)重要領(lǐng)域就是爬蟲,通過Python編寫爬蟲簡單易學(xué),無須掌握太多底層的知識(shí)就可以快速上手,并且能快速地看到成果。對(duì)于要往爬蟲方向發(fā)展的讀者而言,學(xué)習(xí)Python爬蟲是一項(xiàng)不錯(cuò)的選擇。
為什么學(xué)習(xí)本書
隨著大數(shù)據(jù)時(shí)代的到來,萬維網(wǎng)成為了大量信息的載體,如何有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn);谶@種需求,爬蟲技術(shù)應(yīng)運(yùn)而生,并迅速發(fā)展成為一門成熟的技術(shù)。本書站在初學(xué)者的角度,循序漸進(jìn)地講解了學(xué)習(xí)網(wǎng)絡(luò)爬蟲必備的基礎(chǔ)知識(shí),以及一些爬蟲框架的基本使用方法,以幫助讀者掌握爬蟲的相關(guān)技能,使其能夠獨(dú)立編寫自己的Python網(wǎng)絡(luò)爬蟲項(xiàng)目,從而勝任Python網(wǎng)絡(luò)爬蟲工程師相關(guān)崗位的工作。
本書在講解時(shí),采用需求引入的方式介紹網(wǎng)絡(luò)爬蟲的相關(guān)技術(shù),同時(shí)針對(duì)多種技術(shù)進(jìn)行對(duì)比講解,讓讀者深刻地理解這些技術(shù)的不同之處,以選擇適合自己的開發(fā)技巧,提高讀者的開發(fā)興趣和開發(fā)能力。
作為開發(fā)人員,要想真正掌握一門技術(shù),離不開多動(dòng)手練習(xí),所以本書在講解各知識(shí)點(diǎn)的同時(shí),不斷地增加案例,大限度地幫助讀者掌握Python網(wǎng)絡(luò)爬蟲的核心技術(shù)。
如何使用本書
本書基于Python 3,系統(tǒng)全面地講解了Python網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí),全書共分13章,具體介紹如下:
第1、2章主要帶領(lǐng)大家認(rèn)識(shí)網(wǎng)絡(luò)爬蟲,并且掌握爬蟲的實(shí)現(xiàn)原理。希望讀者能明白爬蟲具體是怎樣爬取網(wǎng)頁的,并對(duì)爬取過程中產(chǎn)生的一些問題有所了解,后期會(huì)對(duì)這些問題提供一些合理的解決方案。
第3~5章從網(wǎng)頁請(qǐng)求的原理入手,詳細(xì)講解了爬取和解析網(wǎng)頁數(shù)據(jù)的相關(guān)技術(shù),包括urllib庫的使用、正則表達(dá)式、XPath、Beautiful Soup和JSONPath,以及封裝了這些技術(shù)的Python模塊或庫。希望讀者在解析網(wǎng)頁數(shù)據(jù)時(shí),可根據(jù)具體情況靈活選擇合理的技術(shù)進(jìn)行運(yùn)用。
第6~8章主要講解并發(fā)下載、動(dòng)態(tài)網(wǎng)頁爬取、圖像識(shí)別和文字處理等內(nèi)容。希望讀者能夠體會(huì)到在爬蟲中運(yùn)用多線程和協(xié)程的優(yōu)勢,掌握抓取動(dòng)態(tài)網(wǎng)頁的一些技巧,并且會(huì)處理一些字符格式規(guī)范的圖像和簡單的驗(yàn)證碼。
第9章主要介紹存儲(chǔ)爬蟲數(shù)據(jù),包括數(shù)據(jù)存儲(chǔ)簡介、MongoDB數(shù)據(jù)庫簡介、使用PyMongo庫存儲(chǔ)到數(shù)據(jù)庫等,并結(jié)合豆瓣電影的案例,講解了如何一步步從該網(wǎng)站中爬取、解析、存儲(chǔ)電影信息。通過本章的學(xué)習(xí),讀者將能夠簡單地操作MongoDB數(shù)據(jù)庫,并在以后的工作中靈活運(yùn)用。
第10~12章主要介紹爬蟲框架Scrapy以及自動(dòng)爬取網(wǎng)頁的爬蟲CrawlSpider的相關(guān)知識(shí),通過對(duì)這幾章知識(shí)的學(xué)習(xí),讀者可以對(duì)Scrapy框架有基本認(rèn)識(shí),為后面Scrapy框架的深入學(xué)習(xí)做好鋪墊,同時(shí),也可以掌握CrawlSpider類的使用技巧,在工作中具備獨(dú)當(dāng)一面的能力。
第13章圍繞Scrapy-Redis分布式爬蟲進(jìn)行講解,包括Scrapy-Redis的完整架構(gòu)、運(yùn)作流程、主要組件、基本使用,以及如何搭建Scrapy-Redis開發(fā)環(huán)境等,并結(jié)合百度百科的案例運(yùn)用這些知識(shí)點(diǎn)。通過本章的學(xué)習(xí),讀者可在實(shí)際應(yīng)用中利用分布式爬蟲更高效地提取有用的數(shù)據(jù)。
在學(xué)習(xí)過程中,讀者一定要親自實(shí)踐本書中的案例代碼。另外,如果讀者在理解知識(shí)點(diǎn)的過程中遇到困難,建議不要糾結(jié)于某個(gè)地方,可以先往后學(xué)習(xí)。通常來講,通過逐漸深入的學(xué)習(xí),前面不懂和疑惑的知識(shí)點(diǎn)也就能夠理解了。在學(xué)習(xí)編程的過程中,一定要多動(dòng)手實(shí)踐,如果在實(shí)踐過程中遇到問題,建議多思考,理清思路,認(rèn)真分析問題發(fā)生的原因,并在問題解決后總結(jié)出經(jīng)驗(yàn)。
致謝
本書的編寫和整理工作由傳智播客教育科技股份有限公司完成,主要參與人員有
呂春林、高美云、劉傳梅、王曉娟、毛兆軍等。全體人員在近一年的編寫過程中付出了很多辛勤的汗水,在此表示衷心的感謝。
意見反饋
盡管我們付出了大的努力,但書中仍難免會(huì)有不妥之處,歡迎各界專家和讀者朋友來信提出寶貴意見,我們將不勝感激。在閱讀本書時(shí),發(fā)現(xiàn)任何問題或有不認(rèn)同之處可以通過電子郵件與我們?nèi)〉寐?lián)系。
請(qǐng)發(fā)送電子郵件至:itcast_book@vip.sina.com。
黑馬程序員
2018年3月于北京
黑馬程序員:江蘇傳智播客教育科技股份有限公司(簡稱傳智播客)是一家專門致力于高素質(zhì)軟件開發(fā)人才培養(yǎng)的高科技公司。傳智播客致力于為企業(yè)優(yōu)選一流的人才的培訓(xùn)理念,經(jīng)過多年的教學(xué)探索及戰(zhàn)略布局,已向著綜合型職業(yè)教育集團(tuán)發(fā)展。目前,傳智播客旗下已涵蓋傳智播客IT教育培訓(xùn)、黑馬程序員訓(xùn)練營及博學(xué)谷三大子品牌!昂隈R程序員”是傳智播客旗下高端IT教育品牌。
第1章 初識(shí)爬蟲 1
1.1 爬蟲產(chǎn)生背景 1
1.2 爬蟲的概念 2
1.3 爬蟲的用途 2
1.4 爬蟲的分類 3
1.4.1 通用爬蟲和聚焦爬蟲 3
1.4.2 累積式爬蟲和增量式爬蟲 4
1.4.3 表層爬蟲和深層爬蟲 4
小結(jié)5
習(xí)題5
第2章 爬蟲的實(shí)現(xiàn)原理和技術(shù) 6
2.1 爬蟲實(shí)現(xiàn)原理 6
2.1.1 通用爬蟲工作原理 6
2.1.2 聚焦爬蟲工作原理 8
2.2 爬蟲爬取網(wǎng)頁的詳細(xì)流程 9
2.3 通用爬蟲中網(wǎng)頁的分類 10
2.4 通用爬蟲相關(guān)網(wǎng)站文件 10
2.4.1 robots.txt文件 11
2.4.2 Sitemap.xml文件 12
2.5 防爬蟲應(yīng)對(duì)策略 12
2.6 選擇Python做爬蟲的原因 14
2.7 案例——使用八爪魚工具爬取
第一個(gè)網(wǎng)頁 14
小結(jié)21
習(xí)題21
第3章 網(wǎng)頁請(qǐng)求原理 23
3.1 瀏覽網(wǎng)頁過程 23
3.1.1 統(tǒng)一資源定位符 24
3.1.2 計(jì)算機(jī)域名系統(tǒng) 25
3.2 HTTP網(wǎng)絡(luò)請(qǐng)求原理 25
3.2.1 分析瀏覽器顯示完整網(wǎng)頁
的過程 26
3.2.2 客戶端HTTP請(qǐng)求格式 26
3.2.3 服務(wù)端HTTP響應(yīng)格式 30
3.3 HTTP抓包工具Fiddler 32
3.3.1 Fiddler工作原理 32
3.3.2 Fiddler下載安裝 32
3.3.3 Fiddler界面詳解 33
3.3.4 Fiddler爬取HTTPS設(shè)置 35
3.3.5 使用Fiddler捕獲Chrome
的會(huì)話 37
小結(jié)40
習(xí)題40
第4章 爬取網(wǎng)頁數(shù)據(jù) 42
4.1 urllib庫概述 42
4.2 快速使用urllib爬取網(wǎng)頁 43
4.2.1 快速爬取一個(gè)網(wǎng)頁 43
4.2.2 分析urlopen()方法 44
4.2.3 使用HTTPResponse對(duì)象 45
4.2.4 構(gòu)造Request對(duì)象 46
4.3 使用urllib實(shí)現(xiàn)數(shù)據(jù)傳輸 47
4.3.1 URL編碼轉(zhuǎn)換 47
4.3.2 處理GET請(qǐng)求 48
4.3.3 處理POST請(qǐng)求 49
4.4 添加特定Headers——請(qǐng)求偽裝 51
4.5 代理服務(wù)器 52
4.5.1 簡單的自定義opener 52
4.5.2 設(shè)置代理服務(wù)器 53
4.6 超時(shí)設(shè)置 54
4.7 常見的網(wǎng)絡(luò)異常 55
4.7.1 URLError異常和捕獲 55
4.7.2 HttpError異常和捕獲 55
4.8 更人性化的requests庫 56
4.8.1 requests庫概述 56
4.8.2 requests庫初體驗(yàn) 56
4.8.3 發(fā)送請(qǐng)求 58
4.8.4 返回響應(yīng) 58
4.9 案例——使用urllib庫爬取百度
貼吧 59
小結(jié)61
習(xí)題61
第5章 數(shù)據(jù)解析 63
5.1 網(wǎng)頁數(shù)據(jù)和結(jié)構(gòu) 63
5.1.1 網(wǎng)頁數(shù)據(jù)格式 63
5.1.2 網(wǎng)頁結(jié)構(gòu) 64
5.2 數(shù)據(jù)解析技術(shù) 64
5.3 正則表達(dá)式 65
5.4 XPath與lxml解析庫 66
5.4.1 XPath概述 66
5.4.2 XPath語法 67
5.4.3 XPath開發(fā)工具 70
5.4.4 lxml庫概述 72
5.4.5 lxml庫的基本使用 75
5.5 Beautiful Soup 77
5.5.1 Beautiful Soup概述 77
5.5.2 構(gòu)建BeautifulSoup對(duì)象 78
5.5.3 通過操作方法進(jìn)行解讀
搜索 80
5.5.4 通過CSS選擇器進(jìn)行搜索 83
5.6 JSONPath與json模塊 85
5.6.1 JSON概述 85
5.6.2 JSON與XML比較 86
5.6.3 json模塊介紹 87
5.6.4 json模塊基本應(yīng)用 88
5.6.5 JSONPath簡介 90
5.6.6 JSONPath語法對(duì)比 90
5.6.7 案例——獲取拉勾網(wǎng)城市
列表 92
5.7 案例——解析騰訊社會(huì)招聘網(wǎng)站
的職位信息 94
5.7.1 明確爬蟲爬取目標(biāo) 95
5.7.2 分析要解析的數(shù)據(jù) 95
5.7.3 使用urllib庫爬取社招網(wǎng)
數(shù)據(jù) 96
5.7.4 使用正則、lxml、bs4解析
職位數(shù)據(jù) 98
5.7.5 將數(shù)據(jù)保存到文件中 103
小結(jié)104
習(xí)題104
第6章 并發(fā)下載 106
6.1 多線程爬蟲流程分析 106
6.2 使用queue模塊實(shí)現(xiàn)多線程
爬蟲 107
6.2.1 queue(隊(duì)列)模塊簡介 107
6.2.2 Queue類概述 109
6.3 協(xié)程實(shí)現(xiàn)并發(fā)爬取 110
6.3.1 協(xié)程爬蟲的流程分析 111
6.3.2 第三方庫gevent 111
6.4 案例——三種技術(shù)采集和解析
數(shù)據(jù)對(duì)比 112
6.4.1 單線程實(shí)現(xiàn) 112
6.4.2 多線程實(shí)現(xiàn) 114
6.4.3 協(xié)程實(shí)現(xiàn) 119
6.4.4 性能分析 122
小結(jié)123
習(xí)題123
第7章 爬取動(dòng)態(tài)內(nèi)容 124
7.1 動(dòng)態(tài)網(wǎng)頁介紹 124
7.2 selenium和PhantomJS概述 125
7.3 selenium和PhantomJS安裝
配置 126
7.4 selenium和PhantomJS的基本
應(yīng)用 128
7.4.1 入門操作 128
7.4.2 定位UI元素 133
7.4.3 鼠標(biāo)動(dòng)作鏈 135
7.4.4 填充表單 136
7.4.5 彈窗處理 137
7.4.6 頁面切換 138
7.4.7 頁面前進(jìn)和后退 138
7.4.8 獲取頁面Cookies 138
7.4.9 頁面等待 138
7.5 案例——模擬豆瓣網(wǎng)站登錄 140
小結(jié)142
習(xí)題142
第8章 圖像識(shí)別與文字處理 145
8.1 OCR技術(shù)概述 145
8.2 Tesseract引擎的下載和安裝 147
8.3 pytesseract和PIL庫概述 148
8.3.1 pytesseract庫概述 149
8.3.2 PIL庫概述 149
8.4 處理規(guī)范格式的文字 150
8.4.1 讀取圖像中格式規(guī)范的
文字 151
8.4.2 對(duì)圖片進(jìn)行閾值過濾和
降噪處理 151
8.4.3 識(shí)別圖像的中文字符 153
8.5 處理驗(yàn)證碼 154
8.5.1 驗(yàn)證碼分類 154
8.5.2 簡單識(shí)別圖形驗(yàn)證碼 155
8.6 案例——識(shí)別圖形驗(yàn)證碼 156
小結(jié)157
習(xí)題157
第9章 存儲(chǔ)爬蟲數(shù)據(jù) 159
9.1 數(shù)據(jù)存儲(chǔ)概述 159
9.2 MongoDB數(shù)據(jù)庫概述 160
9.2.1 MongoDB的概念 160
9.2.2 Windows平臺(tái)安裝MongoDB數(shù)據(jù)庫 160
9.2.3 比較MongoDB和MySQL的術(shù)語 163
9.3 使用PyMongo庫存儲(chǔ)到
數(shù)據(jù)庫 165
9.3.1 PyMongo的概念 165
9.3.2 PyMongo的基本操作 165
9.4 案例——存儲(chǔ)網(wǎng)站的電影信息 169
9.4.1 分析待爬取的網(wǎng)頁 169
9.4.2 通過urllib爬取全部頁面 169
9.4.3 通過bs4選取數(shù)據(jù) 171
9.4.4 通過MongoDB存儲(chǔ)
電影信息 172
小結(jié)173
習(xí)題173
第10章 初識(shí)爬蟲框架Scrapy 175
10.1 常見爬蟲框架介紹 175
10.2 Scrapy框架的架構(gòu) 179
10.3 Scrapy框架的運(yùn)作流程 180
10.4 安裝Scrapy框架 181
10.4.1 Windows 7系統(tǒng)下的
安裝 181
10.4.2 Linux(Ubuntu)系統(tǒng)下的
安裝 184
10.4.3 Mac OS系統(tǒng)下的安裝 185
10.5 Scrapy框架的基本操作 186
10.5.1 新建一個(gè)Scrapy項(xiàng)目 186
10.5.2 明確爬取目標(biāo) 187
10.5.3 制作Spiders爬取網(wǎng)頁 188
10.5.4 永久性存儲(chǔ)數(shù)據(jù) 193
10.5.5 Scrapy常用命令 193
小結(jié)194
習(xí)題194
第11章 Scrapy終端與核心組件 196
11.1 Scrapy shell——測試XPath
表達(dá)式 196
11.1.1 啟用Scrapy shell 196
11.1.2 使用Scrapy shell 197
11.1.3 Scrapy shell使用示例 198
11.2 Spiders——爬取和提取結(jié)構(gòu)化
數(shù)據(jù) 200
11.3 Item Pipeline——后期處理
數(shù)據(jù) 201
11.3.1 自定義Item Pipeline 201
11.3.2 完善之前的案例——
item寫入JSON文件 202
11.4 Downloader Middlewares——
防止反爬蟲 203
11.5 Settings——定制Scrapy
組件 206
11.6 案例——斗魚App爬蟲 208
11.6.1 使用Fiddler爬取手機(jī)
App的數(shù)據(jù) 208
11.6.2 分析JSON文件的內(nèi)容 210
11.6.3 使用Scrapy爬取數(shù)據(jù) 211
小結(jié)214
習(xí)題214
第12章 自動(dòng)爬取網(wǎng)頁的爬蟲CrawlSpider 216
12.1 初識(shí)爬蟲類CrawlSpider 216
12.2 CrawlSpider類的工作原理 219
12.3 通過Rule類決定爬取規(guī)則 221
12.4 通過LinkExtractor類提取
鏈接 222
12.5 案例——使用CrawlSpider爬取
騰訊社會(huì)招聘網(wǎng)站 223
小結(jié)228
習(xí)題228
第13章 Scrapy-Redis分布式
爬蟲 230
13.1 Scrapy-Redis概述 230
13.2 Scrapy-Redis的完整架構(gòu) 231
13.3 Scrapy-Redis的運(yùn)作流程 231
13.4 Scrapy-Redis的主要組件 232
13.5 搭建Scrapy-Redis開發(fā)環(huán)境 233
13.5.1 安裝Scrapy-Redis 233
13.5.2 安裝和啟動(dòng)Redis
數(shù)據(jù)庫 234
13.5.3 修改配置文件 redis.conf 239
13.6 分布式的部署 242
13.6.1 分布式策略 242
13.6.2 測試Slave端遠(yuǎn)程連接
Master端 243
13.7 Scrapy-Redis的基本使用 245
13.7.1 創(chuàng)建Scrapy項(xiàng)目 245
13.7.2 明確爬取目標(biāo) 246
13.7.3 制作Spider爬取網(wǎng)頁 247
13.7.4 執(zhí)行分布式爬蟲 249
13.7.5 使用多個(gè)管道存儲(chǔ) 250
13.7.6 處理Redis數(shù)據(jù)庫中的
數(shù)據(jù) 252
13.8 案例——使用分布式爬蟲爬取
百度百科網(wǎng)站 253
13.8.1 創(chuàng)建Scrapy項(xiàng)目 254
13.8.2 分析爬蟲的目標(biāo) 255
13.8.3 制作Spider爬取網(wǎng)頁 257
13.8.4 執(zhí)行爬蟲 260
小結(jié)262
習(xí)題262