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