隨著人工智能浪潮的到來,筆者身邊有越來越多的人投入到人工智能和大數(shù)據(jù)的學習與研究中。他們來自不同的行業(yè),有高校老師和學生,有AI研究專家,有物理或數(shù)學專業(yè)人才。他們都迫切希望能夠獲取大量相關領域的數(shù)據(jù),用于學習和研究。而互聯(lián)網(wǎng)中源源不斷的海量數(shù)據(jù)為他們提供了一個既經(jīng)濟又可靠的來源。如何簡單、高效、快捷地獲取這些數(shù)據(jù)呢?筆者試圖為他們推薦幾本能快速入手的書籍。經(jīng)過一番了解,發(fā)現(xiàn)目前市場上關于網(wǎng)絡爬蟲的圖書主要分為兩類:一類是翻譯成中文的外版圖書,其定位相對高端,且翻譯質量參差不齊,閱讀難度較大,不易上手,故不適合初學者學習;另一類是國內原創(chuàng)的一些關于網(wǎng)絡爬蟲的圖書,這些書大多要求讀者具備一定的Python編程基礎,雖然書中對各種網(wǎng)絡爬蟲框架都有介紹,但是不深入也不成體系,對于零基礎或非計算機專業(yè)的人員來說,顯然也不太適合。
于是,他們就慫恿我,希望我能編寫一本從零基礎開始學起的網(wǎng)絡爬蟲書籍。雖然我從事網(wǎng)絡爬蟲教學工作多年,但我深知教學跟寫書是兩碼事。教學注重臨場發(fā)揮,思維比較發(fā)散;而寫書要求文筆流暢、邏輯嚴謹縝密。我實在沒有信心接受這個挑戰(zhàn)。直到有一天,機械工業(yè)出版社的編輯聯(lián)系到了我,認為我從事教育和研究工作,能講、會說、有技術,對寫書來說正是最大的優(yōu)勢。于是在編輯的鼓勵和指導下,我開始構思和梳理文章脈絡:首先,《從零開始學Scrapy網(wǎng)絡爬蟲》受眾要廣,即使是零基礎或非計算機專業(yè)的小白也能上手;其次,《從零開始學Scrapy網(wǎng)絡爬蟲》內容不追求多和雜,只選用最流行、最好用、最強大的網(wǎng)絡爬蟲框架介紹即可;最后,《從零開始學Scrapy網(wǎng)絡爬蟲》的可操作性和實用性要強,通過迭代案例加深讀者對知識的理解與應用,以典型的、知名的網(wǎng)站為爬取目標,提高讀者解決實際問題的能力!稄牧汩_始學Scrapy網(wǎng)絡爬蟲》正是遵循這樣的思路逐步推進,不斷優(yōu)化,最后順利地完成了寫作。
《從零開始學Scrapy網(wǎng)絡爬蟲》有何特色
1.由淺入深,循序漸進
《從零開始學Scrapy網(wǎng)絡爬蟲》從零開始,先介紹Python語言、網(wǎng)絡爬蟲基礎、Scrapy框架結構等基礎內容;再介紹Scrapy的數(shù)據(jù)庫存儲、動態(tài)頁面爬取、突破反爬蟲技術等核心技術;接著介紹分布式爬蟲的實現(xiàn)、部署和管理等高級技術;最后介紹了一個完整的綜合項目的開發(fā)過程。
2.視頻教學,講解詳盡
為了便于讀者高效、直觀地學習,書中每一章的重點內容都專門錄制了配套教學視頻。讀者可以將圖書內容和教學視頻結合起來,深入、系統(tǒng)地學習,相信一定會取得更好的學習效果。
3.注釋詳細,一目了然
無論是在Python程序設計,還是在Scrapy爬蟲實現(xiàn)部分,《從零開始學Scrapy網(wǎng)絡爬蟲》均對代碼做了詳細的注釋,讀者理解起來會更加順暢。另外,對于多步驟的操作過程,《從零開始學Scrapy網(wǎng)絡爬蟲》在圖例中使用數(shù)字做了標注,便于讀者準確操作。
4.案例豐富,實用易學
《從零開始學Scrapy網(wǎng)絡爬蟲》提供了14個實用性很強的項目案例,這些案例爬取的目標均是知名的、具有代表性的、應用價值較高的網(wǎng)站。讀者通過實際操練這些項目案例,可以更加透徹地理解Scrapy網(wǎng)絡爬蟲的相關知識。
5.提供課件,方便教學
筆者專門為《從零開始學Scrapy網(wǎng)絡爬蟲》制作了專業(yè)的教學PPT,以方便相關院校或培訓機構的教學人員講課時使用。
《從零開始學Scrapy網(wǎng)絡爬蟲》內容
第1篇 基礎篇
第1章 Python基礎
本章介紹了Python環(huán)境搭建,并詳細介紹了Python基本語法、Python內置數(shù)據(jù)結構及Python模塊化設計,為Scrapy網(wǎng)絡爬蟲開發(fā)打下堅實的編程基礎。
第2章 網(wǎng)絡爬蟲基礎
本章介紹了與網(wǎng)絡爬蟲技術相關的HTTP基本原理、網(wǎng)頁基礎,以及使用XPath提取網(wǎng)頁信息的方法,為Scrapy網(wǎng)絡爬蟲開發(fā)打下堅實的理論基礎。
第3章 Scrapy框架介紹
本章首先介紹了網(wǎng)絡爬蟲的原理;然后介紹了Scrapy框架的結構及執(zhí)行流程,并實現(xiàn)了Scrapy的安裝;最后結合案例,實現(xiàn)了第一個Scrapy網(wǎng)絡爬蟲功能。
第4章 Scrapy網(wǎng)絡爬蟲基礎
本章深入Scrapy框架內部,介紹了使用Spider提取數(shù)據(jù)、使用Item封裝數(shù)據(jù)、使用Pipeline處理數(shù)據(jù)的方法,并通過一個項目案例,演示了一個功能完備的Scrapy項目的實現(xiàn)過程。
第2篇 進階篇
第5章 數(shù)據(jù)庫存儲
本章介紹了關系型數(shù)據(jù)庫MySQL、非關系型數(shù)據(jù)庫MongoDB和Redis的下載、安裝及基本操作,并通過3個項目案例,實現(xiàn)了將爬取來的數(shù)據(jù)分別存儲于這3個數(shù)據(jù)庫中的方法。
第6章 JavaScript與AJAX數(shù)據(jù)爬取
本章通過兩個項目案例,介紹了使用Scrapy爬取通過JavaScript或AJAX加載的數(shù)據(jù)的方法和技巧。
第7章 動態(tài)渲染頁面的爬取
本章介紹了使用Selenium和Splash這兩個工具來模擬瀏覽器進行數(shù)據(jù)爬取的方法,并通過兩個項目案例,進一步鞏固使用Selenium和Splash的方法與技巧。
第8章 模擬登錄
本章介紹了某些需要登錄才能訪問的頁面爬取方法,并介紹了模擬登錄、驗證碼識別和Cookie自動登錄等知識,還通過一個項目案例,進一步鞏固了實現(xiàn)模擬登錄的方法和技巧。
第9章 突破反爬蟲技術
本章介紹了突破反爬蟲的幾種技術,主要有降低請求頻率、修改請求頭、禁用Cookie、偽裝成隨機瀏覽器及更換IP地址等,通過這些舉措,可以有效避免目標網(wǎng)站的偵測,提高爬蟲成功率。
第10章 文件和圖片下載
本章介紹了使用Scrapy的中間件批量下載文件和圖片的方法,并通過兩個項目案例,進一步鞏固了文件和圖片下載的方法與技巧。
第3篇 高級篇
第11章 Scrapy-Redis實現(xiàn)分布式爬蟲
本章介紹了使用Scrapy-Redis實現(xiàn)分布式爬蟲的方法。首先介紹了分布式爬蟲的原理,然后介紹了實現(xiàn)分布式爬蟲的思路和核心代碼,最后通過一個圖片下載的項目案例,構造了一個分布式爬蟲系統(tǒng)。
第12章 Scrapyd部署分布式爬蟲
本章介紹了分布式系統(tǒng)的部署和管理。首先介紹了使用Scrapyd和Scrapyd-Client部署分布式爬蟲,然后介紹了使用Docker批量部署分布式爬蟲,最后介紹了如何使用Gerapy管理分布式爬蟲。
第13章 綜合項目:搶票軟件的實現(xiàn)
本章通過全面分析12306購票網(wǎng)站的特點,結合Scrapy網(wǎng)絡爬蟲框架和Selenium瀏覽器工具,使用Python面向對象的設計模式,完成了一個綜合性和實用性都較強的項目:搶票軟件。
《從零開始學Scrapy網(wǎng)絡爬蟲》配套資源獲取方式
《從零開始學Scrapy網(wǎng)絡爬蟲》涉及以下配套資源:
? 配套教學視頻;
? 實例源代碼文件;
? 教學PPT。
這些配套資源需要讀者自行下載。請登錄華章公司網(wǎng)站www.hzbook.com,在該網(wǎng)站上搜索到《從零開始學Scrapy網(wǎng)絡爬蟲》,然后單擊資料下載按鈕,在《從零開始學Scrapy網(wǎng)絡爬蟲》頁面上找到下載鏈接即可下載。
適合閱讀《從零開始學Scrapy網(wǎng)絡爬蟲》的讀者
? 網(wǎng)絡爬蟲初學者;
? 網(wǎng)絡爬蟲愛好者;
? 網(wǎng)絡爬蟲從業(yè)人員;
? 數(shù)據(jù)工程師;
? 高等院校的老師和學生;
? 相關培訓機構的學員。
《從零開始學Scrapy網(wǎng)絡爬蟲》作者
筆者畢業(yè)于中國科學技術大學軟件工程專業(yè),獲碩士學位。現(xiàn)就職于知名的智能語音技術公司,有10余年軟件項目管理經(jīng)驗。在高等院校擔任網(wǎng)絡爬蟲及機器學習方面的授課工作。
《從零開始學Scrapy網(wǎng)絡爬蟲》能夠順利出版,首先要感謝《從零開始學Scrapy網(wǎng)絡爬蟲》編輯歐振旭!他花費了大量時間和精力對《從零開始學Scrapy網(wǎng)絡爬蟲》提出了有價值的修改意見和建議;還要感謝其他為《從零開始學Scrapy網(wǎng)絡爬蟲》的出版提供過幫助的編輯和朋友!沒有他們的大力支持,《從零開始學Scrapy網(wǎng)絡爬蟲》也很難與讀者見面。
由于筆者水平所限,加之成書時間有限,書中可能還存在一些疏漏和不當之處,敬請各位讀者斧正。
張濤
第1篇 基礎篇
第1章 Python基礎 2
1.1 Python簡介 2
1.1.1 Python簡史 2
1.1.2 搭建Python環(huán)境 3
1.1.3 安裝PyCharm集成開發(fā)環(huán)境 6
1.2 Python基本語法 7
1.2.1 基本數(shù)據(jù)類型和運算 7
1.2.2 運算符和表達式 8
1.2.3 條件判斷語句 9
1.2.4 循環(huán)語句 10
1.2.5 字符串 12
1.3 Python內置數(shù)據(jù)結構 14
1.3.1 列表 15
1.3.2 字典 16
1.3.3 元組 17
1.3.4 遍歷對象集合 17
1.4 Python模塊化設計 18
1.4.1 函數(shù) 18
1.4.2 迭代器(iterator) 20
1.4.3 生成器(Generator) 20
1.4.4 類和對象 22
1.4.5 文件與異常 23
1.5 本章小結 25
第2章 網(wǎng)絡爬蟲基礎 26
2.1 HTTP基本原理 26
2.1.1 URL介紹 27
2.1.2 HTTP和HTTPS協(xié)議 27
2.1.3 HTTP請求(Request) 27
2.1.4 HTTP響應(Response) 30
2.2 網(wǎng)頁基礎 32
2.2.1 HTML文檔 33
2.2.2 網(wǎng)頁的結構 33
2.2.3 節(jié)點樹及節(jié)點之間的關系 34
2.3 使用XPath提取網(wǎng)頁信息 36
2.3.1 XPath介紹 36
2.3.2 XPath常用路徑表達式 36
2.3.3 XPath帶謂語的路徑表達式 39
2.4 本章小結 40
第3章 Scrapy框架介紹 41
3.1 網(wǎng)絡爬蟲原理 41
3.1.1 爬蟲執(zhí)行的流程 41
3.2 Scrapy框架結構及執(zhí)行流程 42
3.2.1 Scrapy框架結構 42
3.2.2 Scrapy執(zhí)行流程 44
3.3 Scrapy安裝 44
3.3.1 使用pip安裝Scrapy 44
3.3.2 常見安裝錯誤 45
3.3.3 驗證安裝 46
3.4 第一個網(wǎng)絡爬蟲 46
3.4.1 需求分析 46
3.4.2 創(chuàng)建項目 47
3.4.3 分析頁面 48
3.4.4 實現(xiàn)Spider爬蟲功能 49
3.4.5 運行爬蟲 50
3.4.6 常見問題 51
3.5 本章小結 52
第4章 Scrapy網(wǎng)絡爬蟲基礎 53
4.1 使用Spider提取數(shù)據(jù) 53
4.1.1 Spider組件介紹 53
4.1.2 重寫start_requests()方法 55
4.1.3 Request對象 57
4.1.4 使用選擇器提取數(shù)據(jù) 58
4.1.5 Response對象與XPath 59
4.1.6 Response對象與CSS 61
4.1.7 進一步了解Response對象 62
4.1.8 多頁數(shù)據(jù)的爬取 63
4.2 使用Item封裝數(shù)據(jù) 64
4.2.1 定義Item和Field 65
4.2.2 使用ItemLoader填充容器 66
4.3 使用Pipeline處理數(shù)據(jù) 69
4.3.1 Item Pipeline介紹 70
4.3.2 編寫自己的Item Pipeline 70
4.3.3 啟用Item Pipeline 71
4.3.4 多個Item Pipeline 71
4.3.5 保存為其他類型文件 72
4.4 項目案例:爬取鏈家網(wǎng)二手房信息 75
4.4.1 項目需求 75
4.4.2 技術分析 76
4.4.3 代碼實現(xiàn)及解析 77
4.5 本章小結 85
第2篇 進階篇
第5章 數(shù)據(jù)庫存儲 88
5.1 MySQL數(shù)據(jù)庫 88
5.1.1 關系型數(shù)據(jù)庫概述 88
5.1.2 下載和安裝MySQL數(shù)據(jù)庫 88
5.1.3 數(shù)據(jù)庫管理工具Navicat 92
5.1.4 Python訪問MySQL數(shù)據(jù)庫 94
5.1.5 項目案例 97
5.2 MongoDB數(shù)據(jù)庫 100
5.2.1 NoSQL概述 100
5.2.2 MongoDB介紹 100
5.2.3 MongoDB的下載和安裝 101
5.2.4 Python訪問MongoDB數(shù)據(jù)庫 102
5.2.5 項目案例 108
5.3 Redis數(shù)據(jù)庫 111
5.3.1 Redis的下載和安裝 111
5.3.2 Python訪問Redis 113
5.3.3 項目案例 118
5.4 本章小結 121
第6章 JavaScript與AJAX數(shù)據(jù)爬取 122
6.1 JavaScript簡介 122
6.2 項目案例:爬取QQ音樂榜單歌曲 122
6.2.1 項目需求 122
6.2.2 技術分析 123
6.2.3 代碼實現(xiàn)及解析 126
6.2.4 更常見的動態(tài)網(wǎng)頁 128
6.3 AJAX簡介 129
6.4 項目案例:爬取豆瓣電影信息 130
6.4.1 項目需求 130
6.4.2 技術分析 130
6.4.3 代碼實現(xiàn)及解析 133
6.5 本章小結 135
第7章 動態(tài)渲染頁面的爬取 136
7.1 Selenium實現(xiàn)動態(tài)頁面爬取 136
7.1.1 Selenium安裝 136
7.1.2 Selenium簡單實現(xiàn) 137
7.1.3 Selenium語法 138
7.2 項目案例:爬取今日頭條熱點新聞 145
7.2.1 項目需求 145
7.2.2 技術分析 145
7.2.3 代碼實現(xiàn)及解析 147
7.3 Splash實現(xiàn)動態(tài)頁面爬取 151
7.3.1 Splash介紹 151
7.3.2 Splash環(huán)境搭建 152
7.3.3 Splash模塊介紹 156
7.4 項目案例:爬取一號店中的iPhone手機信息 162
7.4.1 項目需求 162
7.4.2 技術分析 163
7.4.3 代碼實現(xiàn)及解析 165
7.5 本章小結 168
第8章 模擬登錄 169
8.1 模擬登錄解析 169
8.1.1 登錄過程解析 169
8.1.2 模擬登錄的實現(xiàn) 171
8.2 驗證碼識別 174
8.2.1 使用OCR識別驗證碼 174
8.2.2 處理復雜驗證碼 176
8.2.3 五花八門的驗證碼 177
8.3 Cookie自動登錄 177
8.3.1 Cookie介紹 178
8.3.2 獲取Cookie的庫browsercookie 179
8.4 項目案例:爬取起點中文網(wǎng)某用戶的書架信息 180
8.4.1 項目需求 180
8.4.2 技術分析 180
8.4.3 代碼實現(xiàn)及解析 182
8.5 本章小結 184
第9章 突破反爬蟲技術 185
9.1 反爬蟲技術及突破措施 185
9.2 偽裝成不同的瀏覽器 187
9.2.1 UserAgentMiddleware中間件介紹 187
9.2.2 實現(xiàn)偽裝成隨機瀏覽器 188
9.2.3 更簡單的方法 191
9.3 使用HTTP代理服務器 192
9.3.1 HTTP代理服務器 192
9.3.2 獲取免費代理 193
9.3.3 實現(xiàn)隨機代理 199
9.4 本章小結 202
第10章 文件和圖片下載 203
10.1 文件下載 203
10.1.1 FilesPipeline執(zhí)行流程 203
10.2 項目案例:爬取seaborn案例源文件 204
10.2.1 項目需求 204
10.2.2 技術分析 206
10.2.3 代碼實現(xiàn)及解析 206
10.2.4 更多功能 211
10.3 圖片下載 212
10.4 項目案例:爬取攝圖網(wǎng)圖片 213
10.4.1 項目需求 213
10.4.2 技術分析 215
10.4.3 代碼實現(xiàn)及解析 215
10.5 本章小結 221
第3篇 高級篇
第11章 Scrapy-Redis實現(xiàn)分布式爬蟲 224
11.1 分布式爬蟲原理 224
11.2 Scrapy-Redis實現(xiàn)分布式爬蟲分析 225
11.2.1 實現(xiàn)分布式爬蟲思路 225
11.2.2 Scrapy-Redis代碼解析 226
11.2.3 分布式爬蟲功能配置 231
11.3 項目案例:分布式爬蟲爬取攝圖網(wǎng)圖片 233
11.3.1 技術分析 233
11.3.2 代碼實現(xiàn)及解析 234
11.4 本章小結 237
第12章 Scrapyd部署分布式爬蟲 238
12.1 使用Scrapyd部署分布式爬蟲 238
12.1.1 Scrapyd的安裝及運行 238
12.1.2 Scrapyd功能介紹 241
12.2 使用Scrapyd-Client批量部署 244
12.3 使用Docker部署分布式爬蟲 248
12.4 使用Gerapy管理分布式爬蟲 253
12.5 本章小結 258
第13章 綜合項目:搶票軟件的實現(xiàn) 259
13.1 項目需求 259
13.2 技術分析 262
13.3 項目實現(xiàn)及解析 263
13.3.1 搭建Scrapy項目框架 263
13.3.2 實現(xiàn)獲取站點信息的爬蟲 264
13.3.3 實現(xiàn)站點處理類 266
13.3.4 實現(xiàn)購票類 267
13.3.5 實現(xiàn)購票功能 280
13.3.6 運行項目 282
13.3.7 優(yōu)化項目 282
13.4 本章小結 283