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