Python網(wǎng)絡(luò)爬蟲(chóng)從入門(mén)到實(shí)踐 第2版
定 價(jià):69 元
- 作者:唐松
- 出版時(shí)間:2019/6/1
- ISBN:9787111626879
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP311.561
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
使用Python編寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)程序獲取互聯(lián)網(wǎng)上的大數(shù)據(jù)是當(dāng)前的熱門(mén)專(zhuān)題。本書(shū)內(nèi)容包括三部分:基礎(chǔ)部分、進(jìn)階部分和項(xiàng)目實(shí)踐;A(chǔ)部分(第1~7章)主要介紹爬蟲(chóng)的三個(gè)步驟——獲取網(wǎng)頁(yè)、解析網(wǎng)頁(yè)和存儲(chǔ)數(shù)據(jù),并通過(guò)諸多示例的講解,讓讀者能夠從基礎(chǔ)內(nèi)容開(kāi)始系統(tǒng)性地學(xué)習(xí)爬蟲(chóng)技術(shù),并在實(shí)踐中提升Python爬蟲(chóng)水平。進(jìn)階部分(第8~13章)包括多線(xiàn)程的并發(fā)和并行爬蟲(chóng)、分布式爬蟲(chóng)、更換IP等,幫助讀者進(jìn)一步提升爬蟲(chóng)水平。項(xiàng)目實(shí)踐部分(第14~17章)使用本書(shū)介紹的爬蟲(chóng)技術(shù)對(duì)幾個(gè)真實(shí)的網(wǎng)站進(jìn)行抓取,讓讀者能在讀完本書(shū)后根據(jù)自己的需求寫(xiě)出爬蟲(chóng)程序。
近年來(lái),大數(shù)據(jù)成為業(yè)界與學(xué)術(shù)界的熱門(mén)話(huà)題之一,數(shù)據(jù)已經(jīng)成為每個(gè)公司極為重要的資產(chǎn);ヂ(lián)網(wǎng)上大量的公開(kāi)數(shù)據(jù)為個(gè)人和公司提供了以往想象不到的可以獲取的數(shù)據(jù)量,而掌握網(wǎng)絡(luò)爬蟲(chóng)技術(shù)可以幫助你獲取這些有用的公開(kāi)數(shù)據(jù)集。
執(zhí)筆本書(shū)的起因是我打算在知乎上寫(xiě)博客向香港中文大學(xué)市場(chǎng)營(yíng)銷(xiāo)學(xué)的研究生講解Python 網(wǎng)絡(luò)爬蟲(chóng)技術(shù),讓這些商科學(xué)生掌握一些大數(shù)據(jù)時(shí)代重要的技術(shù)。因此,本書(shū)除了面向技術(shù)人員外,還面向不懂編程的“小白”,希望能夠?qū)⒕W(wǎng)絡(luò)爬蟲(chóng)學(xué)習(xí)的門(mén)檻降低,讓大家都能享受到使用網(wǎng)絡(luò)爬蟲(chóng)編程的樂(lè)趣。過(guò)去的一年中,本書(shū)第1版幫助很多讀者開(kāi)啟了Python和網(wǎng)絡(luò)爬蟲(chóng)的世界,因此有幸獲得出版社的邀請(qǐng),在之前版本的基礎(chǔ)上進(jìn)行修改,更新書(shū)中的案例以及添加新的內(nèi)容,形成第2版。
本書(shū)所有代碼均在 Python 3.6 中測(cè)試通過(guò),并存放在 Github 和百度網(wǎng)盤(pán)上:Github鏈接為 https://github.com/Santostang/PythonScraping;百度網(wǎng)盤(pán)鏈接為https://pan.baidu.com/s/14RA8Srew8tbqVT977JDvNw,提取碼為h2kf。為了方便大家練習(xí)Python網(wǎng)絡(luò)爬蟲(chóng),我專(zhuān)門(mén)搭建了一個(gè)博客網(wǎng)站用于Python網(wǎng)絡(luò)爬蟲(chóng)的教學(xué),本書(shū)的教學(xué)部分全部基于爬取我的個(gè)人博客網(wǎng)(www.santostang.com)。一方面,由于這個(gè)網(wǎng)站不會(huì)更改設(shè)計(jì)和框架,因此本書(shū)的網(wǎng)絡(luò)爬蟲(chóng)代碼可以一直使用;另一方面,由于這是我自己的博客網(wǎng)站,因此可以避免一些法律上的風(fēng)險(xiǎn)。
讀者對(duì)象
(1)對(duì)Python編程和網(wǎng)絡(luò)爬蟲(chóng)感興趣的大專(zhuān)院校師生,需要獲取數(shù)據(jù)進(jìn)行分析;
(2)打算轉(zhuǎn)行或入行爬蟲(chóng)工程師、數(shù)據(jù)分析師、數(shù)據(jù)科學(xué)家的人士;
(3)需要使用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)自動(dòng)獲取數(shù)據(jù)分析的各行業(yè)人士。
勘誤和支持
由于作者水平和能力有限,編寫(xiě)時(shí)間倉(cāng)促,不妥之處在所難免,希望讀者批評(píng)指正。本書(shū)的讀者QQ群為798652826,歡迎讀者加群交流。另外,也可以到我的博客www.santostang.com反饋意見(jiàn),歡迎讀者和網(wǎng)絡(luò)爬蟲(chóng)愛(ài)好者不吝賜教。
如何閱讀本書(shū)
本書(shū)分為17章。
第 1~7 章為基礎(chǔ)部分,主要介紹Python入門(mén),Python網(wǎng)絡(luò)爬蟲(chóng)的獲取網(wǎng)頁(yè)、解析網(wǎng)頁(yè)和存儲(chǔ)數(shù)據(jù)三個(gè)流程,以及Scrapy爬蟲(chóng)框架。這部分每一章的最后都有自我實(shí)踐題,讀者可以通過(guò)實(shí)踐題熟悉Python 爬蟲(chóng)代碼的編寫(xiě)。
第 8~13 章為進(jìn)階部分,主要介紹多線(xiàn)程和多進(jìn)程爬蟲(chóng)、反爬蟲(chóng)、服務(wù)器爬蟲(chóng)和分布式爬蟲(chóng)等進(jìn)階爬蟲(chóng)技術(shù),這部分為你在爬蟲(chóng)實(shí)踐中遇到的問(wèn)題提供了解決方案。
第 14~17章為項(xiàng)目實(shí)踐部分,每一章包含一個(gè)詳細(xì)的爬蟲(chóng)案例,每個(gè)案例都覆蓋之前章節(jié)的知識(shí),讓你在學(xué)習(xí) Python 爬蟲(chóng)后,可以通過(guò)在真實(shí)網(wǎng)站中練習(xí)來(lái)消化和吸收 Python爬蟲(chóng)的知識(shí)。
本書(shū)幾乎每章都使用案例來(lái)學(xué)習(xí)Python網(wǎng)絡(luò)爬蟲(chóng),希望告訴讀者“通過(guò)實(shí)戰(zhàn)解決實(shí)際問(wèn)題,才能高效地學(xué)習(xí)新知識(shí)”。手輸代碼,練習(xí)案例,才是學(xué)習(xí)Python和網(wǎng)絡(luò)爬蟲(chóng)的有效方法。
致謝
首先感謝卞誠(chéng)君老師在我寫(xiě)書(shū)過(guò)程中給予的指導(dǎo)和幫助。沒(méi)有他的提議,我不會(huì)想到將自己的網(wǎng)絡(luò)爬蟲(chóng)博客整理成一本書(shū)出版,更不會(huì)有本書(shū)的第2版。
從轉(zhuǎn)行數(shù)據(jù)分析,到申請(qǐng)去康奈爾大學(xué)讀書(shū),再到回國(guó)做數(shù)據(jù)分析師,我在計(jì)算機(jī)技術(shù)和數(shù)據(jù)科學(xué)的道路上,得到了無(wú)數(shù)貴人的幫助和提攜。首先感謝劉建南教授帶我進(jìn)入了數(shù)據(jù)挖掘的大門(mén),無(wú)私地將數(shù)據(jù)挖掘、營(yíng)銷(xiāo)知識(shí)和經(jīng)驗(yàn)傾囊相授,您是我的啟蒙老師,也是我一生的恩師。
感謝騰訊公司商業(yè)分析組和數(shù)據(jù)服務(wù)中心的各位同事,特別感謝我的組長(zhǎng)張殿鵬和導(dǎo)師王歡,他們耐心地培養(yǎng)和教導(dǎo)我如何成為一名優(yōu)秀的數(shù)據(jù)分析師,讓我放手去挑戰(zhàn)和嘗試不同項(xiàng)目,堅(jiān)持將數(shù)據(jù)分析的成果落地。
感謝一路走來(lái),支持我、幫助我的前輩和朋友,包括香港中文大學(xué)的教授和朋友——馬旭飛教授、李宜威博士、數(shù)據(jù)科學(xué)家周啟航、數(shù)據(jù)分析師趙作棟、數(shù)據(jù)分析師王禮斌以及好友孫成帥、張蓓等,康奈爾大學(xué)的同學(xué)——數(shù)據(jù)科學(xué)家湯心韻等、思路富邦有限公司總裁陳智銓、數(shù)據(jù)科學(xué)家吳嘉杰。尤其感謝IBM香港CTO戴劍寒博士、香港中文大學(xué)(深圳)校長(zhǎng)講席教授賈建民博士、TalkingData騰云大學(xué)執(zhí)行校長(zhǎng)楊慧博士和DaoCloud首席架構(gòu)師王天青在百忙中熱情地為本書(shū)寫(xiě)推薦語(yǔ)。
感謝我的父母、妹妹和女朋友給我一貫的支持和幫助!
唐松
中國(guó)深圳
唐松,康奈爾大學(xué)信息科學(xué)研究生,高考獲全額獎(jiǎng)學(xué)金就讀于香港中文大學(xué)計(jì)量營(yíng)銷(xiāo)和金融學(xué),畢業(yè)后與IBM合作A100項(xiàng)目,為美的、中信等公司實(shí)踐大數(shù)據(jù)落地項(xiàng)目,熱衷將數(shù)據(jù)科學(xué)與商業(yè)結(jié)合應(yīng)用。
前言
第1章 網(wǎng)絡(luò)爬蟲(chóng)入門(mén)1
1.1 為什么要學(xué)網(wǎng)絡(luò)爬蟲(chóng)2
1.1.1 網(wǎng)絡(luò)爬蟲(chóng)能帶來(lái)什么好處2
1.1.2 能從網(wǎng)絡(luò)上爬取什么數(shù)據(jù)3
1.1.3 應(yīng)不應(yīng)該學(xué)爬蟲(chóng)3
1.2 網(wǎng)絡(luò)爬蟲(chóng)是否合法3
1.2.1 Robots協(xié)議4
1.2.2 網(wǎng)絡(luò)爬蟲(chóng)的約束5
1.3 網(wǎng)絡(luò)爬蟲(chóng)的基本議題6
1.3.1 Python爬蟲(chóng)的流程7
1.3.2 三個(gè)流程的技術(shù)實(shí)現(xiàn)7
第2章 編寫(xiě)第一個(gè)網(wǎng)絡(luò)爬蟲(chóng)9
2.1 搭建Python平臺(tái)10
2.1.1 Python的安裝10
2.1.2 使用pip安裝第三方庫(kù)12
2.1.3 使用編輯器Jupyter 編程13
2.1.4 使用編輯器Pycharm編程15
2.2 Python 使用入門(mén)18
2.2.1 基本命令18
2.2.2 數(shù)據(jù)類(lèi)型19
2.2.3 條件語(yǔ)句和循環(huán)語(yǔ)句21
2.2.4 函數(shù)23
2.2.5 面向?qū)ο缶幊?4
2.2.6 錯(cuò)誤處理28
2.3 編寫(xiě)第一個(gè)簡(jiǎn)單的爬蟲(chóng)29
2.3.1 第一步:獲取頁(yè)面29
2.3.2 第二步:提取需要的數(shù)據(jù)30
2.3.3 第三步:存儲(chǔ)數(shù)據(jù)32
2.4 Python實(shí)踐:基礎(chǔ)鞏固33
2.4.1 Python基礎(chǔ)試題34
2.4.2 參考答案35
2.4.3 自我實(shí)踐題38
第3章 靜態(tài)網(wǎng)頁(yè)抓取39
3.1 安裝Requests40
3.2 獲取響應(yīng)內(nèi)容40
3.3 定制Requests41
3.3.1 傳遞URL參數(shù)41
3.3.2 定制請(qǐng)求頭42
3.3.3 發(fā)送POST請(qǐng)求43
3.3.4 超時(shí)44
3.4 Requests爬蟲(chóng)實(shí)踐:TOP250電影數(shù)據(jù)44
3.4.1 網(wǎng)站分析45
3.4.2 項(xiàng)目實(shí)踐45
3.4.3 自我實(shí)踐題47
第4章 動(dòng)態(tài)網(wǎng)頁(yè)抓取48
4.1 動(dòng)態(tài)抓取的實(shí)例49
4.2 解析真實(shí)地址抓取50
4.3 通過(guò)Selenium模擬瀏覽器抓取55
4.3.1 Selenium的安裝與基本介紹55
4.3.2 Selenium的實(shí)踐案例57
4.3.3 Selenium獲取文章的所有評(píng)論58
4.3.4 Selenium的高級(jí)操作61
4.4 Selenium爬蟲(chóng)實(shí)踐:深圳短租數(shù)據(jù)64
4.4.1 網(wǎng)站分析64
4.4.2 項(xiàng)目實(shí)踐66
4.4.3 自我實(shí)踐題69
第5章 解析網(wǎng)頁(yè)70
5.1 使用正則表達(dá)式解析網(wǎng)頁(yè)71
5.1.1 re.match方法71
5.1.2 re.search方法74
5.1.3 re.findall方法74
5.2 使用BeautifulSoup解析網(wǎng)頁(yè)76
5.2.1 BeautifulSoup的安裝76
5.2.2 使用BeautifulSoup獲取博客標(biāo)題77
5.2.3 BeautifulSoup的其他功能78
5.3 使用lxml解析網(wǎng)頁(yè)82
5.3.1 lxml的安裝82
5.3.2 使用lxml獲取博客標(biāo)題82
5.3.3 XPath的選取方法84
5.4 總結(jié)85
5.5 BeautifulSoup爬蟲(chóng)實(shí)踐:房屋價(jià)格數(shù)據(jù)86
5.5.1 網(wǎng)站分析86
5.5.2 項(xiàng)目實(shí)踐87
5.5.3 自我實(shí)踐題89
第6章 數(shù)據(jù)存儲(chǔ)90
6.1 基本存儲(chǔ):存儲(chǔ)至TXT或CSV91
6.1.1 把數(shù)據(jù)存儲(chǔ)至TXT91
6.1.2 把數(shù)據(jù)存儲(chǔ)至CSV93
6.2 存儲(chǔ)至MySQL數(shù)據(jù)庫(kù)94
6.2.1 下載安裝MySQL95
6.2.2 MySQL的基本操作99
6.2.3 Python操作MySQL數(shù)據(jù)庫(kù)104
6.3 存儲(chǔ)至MongoDB數(shù)據(jù)庫(kù)106
6.3.1 下載安裝MongoDB107
6.3.2 MongoDB的基本概念110
6.3.3 Python操作MongoDB數(shù)據(jù)庫(kù)112
6.3.4 RoboMongo的安裝與使用113
6.4 總結(jié)115
6.5 MongoDB爬蟲(chóng)實(shí)踐:虎撲論壇116
6.5.1 網(wǎng)站分析116
6.5.2 項(xiàng)目實(shí)踐117
6.5.3 自我實(shí)踐題123
第7章 Scrapy框架124
7.1 Scrapy是什么125
7.1.1 Scrapy架構(gòu)125
7.1.2 Scrapy數(shù)據(jù)流(Data Flow)126
7.1.3 選擇Scrapy還是Requests+bs4127
7.2 安裝Scrapy128
7.3 通過(guò)Scrapy抓取博客128
7.3.1 創(chuàng)建一個(gè)Scrapy項(xiàng)目128
7.3.2 獲取博客網(wǎng)頁(yè)并保存129
7.3.3 提取博客標(biāo)題和鏈接數(shù)據(jù)131
7.3.4 存儲(chǔ)博客標(biāo)題和鏈接數(shù)據(jù)133
7.3.5 獲取文章內(nèi)容134
7.3.6 Scrapy的設(shè)置文件136
7.4 Scrapy爬蟲(chóng)實(shí)踐:財(cái)經(jīng)新聞數(shù)據(jù)137
7.4.1 網(wǎng)站分析137
7.4.2 項(xiàng)目實(shí)踐138
7.4.3 自我實(shí)踐題141
第8章 提升爬蟲(chóng)的速度142
8.1 并發(fā)和并行,同步和異步143
8.1.1 并發(fā)和并行143
8.1.2 同步和異步143
8.2 多線(xiàn)程爬蟲(chóng)144
8.2.1 簡(jiǎn)單的單線(xiàn)程爬蟲(chóng)145
8.2.2 學(xué)習(xí)Python多線(xiàn)程145
8.2.3 簡(jiǎn)單的多線(xiàn)程爬蟲(chóng)148
8.2.4 使用Queue的多線(xiàn)程爬蟲(chóng)150
8.3 多進(jìn)程爬蟲(chóng)153
8.3.1 使用multiprocessing的多進(jìn)程爬蟲(chóng)153
8.3.2 使用Pool + Queue的多進(jìn)程爬蟲(chóng)155
8.4 多協(xié)程爬蟲(chóng)158
8.5 總結(jié)160
第9章 反爬蟲(chóng)問(wèn)題163
9.1 為什么會(huì)被反爬蟲(chóng)164
9.2 反爬蟲(chóng)的方式有哪些164
9.2.1 不返回網(wǎng)頁(yè)165
9.2.2 返回非目標(biāo)網(wǎng)頁(yè)165
9.2.3 獲取數(shù)據(jù)變難166
9.3 如何“反反爬蟲(chóng)”167
9.3.1 修改請(qǐng)求頭167
9.3.2 修改爬蟲(chóng)的間隔時(shí)間168
9.3.3 使用代理171
9.3.4 更換IP地址172
9.3.5 登錄獲取數(shù)據(jù)172
9.4 總結(jié)172
第10章 解決中文亂碼173
10.1 什么是字符編碼174
10.2 Python的字符編碼176
10.3 解決中文編碼問(wèn)題179
10.3.1 問(wèn)題1:獲取網(wǎng)站的中文顯示亂碼179
10.3.2 問(wèn)題2:非法字符拋出異常180
10.3.3 問(wèn)題3:網(wǎng)頁(yè)使用gzip壓縮181
10.3.4 問(wèn)題4:讀寫(xiě)文件的中文亂碼182
10.4 總結(jié)184
第11章 登錄與驗(yàn)證碼處理185
11.1 處理登錄表單186
11.1.1 處理登錄表單186
11.1.2 處理cookies,讓網(wǎng)頁(yè)記住你的登錄190
11.1.3 完整的登錄代碼193
11.2 驗(yàn)證碼的處理194
11.2.1 如何使用驗(yàn)證碼驗(yàn)證195
11.2.2 人工方法處理驗(yàn)證碼197
11.2.3 OCR處理驗(yàn)證碼200
11.3 總結(jié)203
第12章 服務(wù)器采集204
12