産品特色
編輯推薦
適讀人群 :有一定Python語言基礎,想學習編寫復雜網絡爬蟲的讀者使用 《精通Scrapy網絡爬蟲》以應用為齣發點,詳細深入地介紹瞭Python流行框架Scrapy的核心技術及網絡爬蟲的開發技巧。
《精通Scrapy網絡爬蟲》分為基礎篇和高級篇兩部分,基礎篇重點介紹Scrapy的核心元素,如spider、selector、item、link等;高級篇講解如登錄認證、文件下載、執行JavaScript、動態網頁爬取、使用HTTP代理、分布式爬蟲的編寫等內容。
為方便讀者快速上手,《精通Scrapy網絡爬蟲》還設計瞭大量項目案列,包括供練習用的網站的爬取以及如京東、知乎、豆瓣、360等網站的爬取。
《精通Scrapy網絡爬蟲》很適閤有一定Python語言基礎,想學習編寫復雜網絡爬蟲的讀者使用。此外,書中涉及的關聯知識很豐富,可以幫助讀者拓展知識麵,掌握更多實用技能。
內容簡介
《精通Scrapy網絡爬蟲》深入係統地介紹瞭Python流行框架Scrapy的相關技術及使用技巧。《精通Scrapy網絡爬蟲》共14章,從邏輯上可分為基礎篇和高級篇兩部分,基礎篇重點介紹Scrapy的核心元素,如spider、selector、item、link等;高級篇講解爬蟲的高級話題,如登錄認證、文件下載、執行JavaScript、動態網頁爬取、使用HTTP代理、分布式爬蟲的編寫等,並配閤項目案例講解,包括供練習使用的網站,以及京東、知乎、豆瓣、360爬蟲案例等。
《精通Scrapy網絡爬蟲》案例豐富,注重實踐,代碼注釋詳盡,適閤有一定Python語言基礎,想學習編寫復雜網絡爬蟲的讀者使用。
作者簡介
劉碩:碩士,曾就職於知名外企,從事一綫開發工作10年,目前主要從事Python開發與教學工作,在慕課網開設有多門Python課程,深受學員歡迎。
目錄
第1章 初識Scrapy 1
1.1 網絡爬蟲是什麼 1
1.2 Scrapy簡介及安裝 2
1.3 編寫第一個Scrapy爬蟲 3
1.3.1 項目需求 4
1.3.2 創建項目 4
1.3.3 分析頁麵 5
1.3.4 實現Spider 6
1.3.5 運行爬蟲 8
1.4 本章小結 11
第2章 編寫Spider 12
2.1 Scrapy框架結構及工作原理 12
2.2 Request和Response對象 14
2.2.1 Request對象 15
2.2.2 Response對象 16
2.3 Spider開發流程 18
2.3.1 繼承scrapy.Spider 19
2.3.2 為Spider命名 20
2.3.3 設定起始爬取點 20
2.3.4 實現頁麵解析函數 22
2.4 本章小結 22
第3章 使用Selector提取數據 23
3.1 Selector對象 23
3.1.1 創建對象 24
3.1.2 選中數據 25
3.1.3 提取數據 26
3.2 Response內置Selector 28
3.3 XPath 29
3.3.1 基礎語法 30
3.3.2 常用函數 35
3.4 CSS選擇器 36
3.5 本章小結 40
第4章 使用Item封裝數據 41
4.1 Item和Field 42
4.2 拓展Item子類 44
4.3 Field元數據 44
4.4 本章小結 47
第5章 使用Item Pipeline處理數據 48
5.1 Item Pipeline 48
5.1.1 實現Item Pipeline 49
5.1.2 啓用Item Pipeline 50
5.2 更多例子 51
5.2.1 過濾重復數據 51
5.2.2 將數據存入
MongoDB 54
5.3 本章小結 57
第6章 使用LinkExtractor提取鏈接 58
6.1 使用LinkExtractor 59
6.2 描述提取規則 60
6.3 本章小結 65
第7章 使用Exporter導齣數據 66
7.1 指定如何導齣數據 67
7.1.1 命令行參數 67
7.1.2 配置文件 69
7.2 添加導齣數據格式 70
7.2.1 源碼參考 70
7.2.2 實現Exporter 72
7.3 本章小結 74
第8章 項目練習 75
8.1 項目需求 77
8.2 頁麵分析 77
8.3 編碼實現 83
8.4 本章小結 88
第9章 下載文件和圖片 89
9.1 FilesPipeline和
ImagesPipeline 89
9.1.1 FilesPipeline使用
說明 90
9.1.2 ImagesPipeline使用
說明 91
9.2 項目實戰:爬取matplotlib
例子源碼文件 92
9.2.1 項目需求 92
9.2.2 頁麵分析 94
9.2.3 編碼實現 96
9.3 項目實戰:下載360圖片 103
9.3.1 項目需求 104
9.3.2 頁麵分析 104
9.3.3 編碼實現 107
9.4 本章小結 109
第10章 模擬登錄 110
10.1 登錄實質 110
10.2 Scrapy模擬登錄 114
10.2.1 使用FormRequest 114
10.2.2 實現登錄Spider 117
10.3 識彆驗證碼 119
10.3.1 OCR識彆 119
10.3.2 網絡平颱識彆 123
10.3.3 人工識彆 127
10.4 Cookie登錄 128
10.4.1 獲取瀏覽器
Cookie 128
10.4.2 CookiesMiddleware
源碼分析 129
10.4.3 實現BrowserCookies-
Middleware 132
10.4.4 爬取知乎個人
信息 133
10.5 本章小結 135
第11章 爬取動態頁麵 136
11.1 Splash渲染引擎 140
11.1.1 render.html端點 141
11.1.2 execute端點 142
11.2 在Scrapy中使用Splash 145
11.3 項目實戰:爬取toscrape
中的名人名言 146
11.3.1 項目需求 146
11.3.2 頁麵分析 146
11.3.3 編碼實現 147
11.4 項目實戰:爬取京東商城
中的書籍信息 149
11.4.1 項目需求 149
11.4.2 頁麵分析 149
11.4.3 編碼實現 152
11.5 本章小結 154
第12章 存入數據庫 155
12.1 SQLite 156
12.2 MySQL 159
12.3 MongoDB 165
12.4 Redis 169
12.5 本章小結 173
第13章 使用HTTP代理 174
13.1 HttpProxyMiddleware 175
13.1.1 使用簡介 175
13.1.2 源碼分析 177
13.2 使用多個代理 179
13.3 獲取免費代理 180
13.4 實現隨機代理 184
13.5 項目實戰:爬取豆瓣電影
信息 187
13.5.1 項目需求 188
13.5.2 頁麵分析 189
13.5.3 編碼實現 194
13.6 本章小結 198
第14章 分布式爬取 199
14.1 Redis的使用 200
14.1.1 安裝Redis 200
14.1.2 Redis基本命令 201
14.2 scrapy-redis源碼分析 206
14.2.1 分配爬取任務
部分 207
14.2.2 匯總爬取數據
部分 214
14.3 使用scrapy-redis進行分
布式爬取 217
14.3.1 搭建環境 217
14.3.2 項目實戰 218
14.4 本章小結 224
精彩書摘
第1章初識Scrapy
本章首先介紹爬蟲的基本概念、工作流程,然後介紹Scrapy的安裝和網絡爬蟲項目的實現流程,使讀者對網絡爬蟲有一個大緻的瞭解,並且建立起網絡爬蟲的編寫思路。本章重點講解以下內容:
?網絡爬蟲及爬蟲的工作流程。
?Scrapy的介紹與安裝。
?網絡爬蟲編寫步驟。
1.1網絡爬蟲是什麼
網絡爬蟲是指在互聯網上自動爬取網站內容信息的程序,也被稱作網絡蜘蛛或網絡機器人。大型的爬蟲程序被廣泛應用於搜索引擎、數據挖掘等領域,個人用戶或企業也可以利用爬蟲收集對自身有價值的數據。舉一個簡單的例子,假設你在本地新開瞭一傢以外賣生意為主的餐館,現在要給菜品定價,此時便可以開發一個爬蟲程序,在美團、餓瞭麼、百度外賣這些外賣網站爬取大量其他餐館的菜品價格作為參考,以指導定價。
一個網絡爬蟲程序的基本執行流程可以總結為以下循環:
1.下載頁麵
一個網頁的內容本質上就是一個HTML文本,爬取一個網頁內容之前,首先要根據網頁的URL下載網頁。
2.提取頁麵中的數據
當一個網頁(HTML)下載完成後,對頁麵中的內容進行分析,並提取齣我們感興趣的數據,提取到的數據可以以多種形式保存起來,比如將數據以某種格式(CSV、JSON)寫入文件中,或存儲到數據庫(MySQL、MongoDB)中。
3.提取頁麵中的鏈接
通常,我們想要獲取的數據並不隻在一個頁麵中,而是分布在多個頁麵中,這些頁麵彼此聯係,一個頁麵中可能包含一個或多個到其他頁麵的鏈接,提取完當前頁麵中的數據後,還要把頁麵中的某些鏈接也提取齣來,然後對鏈接頁麵進行爬取(循環1-3步驟)。
設計爬蟲程序時,還要考慮防止重復爬取相同頁麵(URL去重)、網頁搜索策略(深度優先或廣度優先等)、爬蟲訪問邊界限定等一係列問題。
從頭開發一個爬蟲程序是一項煩瑣的工作,為瞭避免因製造輪子而消耗大量時間,在實際應用中我們可以選擇使用一些優秀的爬蟲框架,使用框架可以降低開發成本,提高程序質量,讓我們能夠專注於業務邏輯(爬取有價值的數據)。接下來,本書就帶你學習目前非常流行的開源爬蟲框架Scrapy。
1.2Scrapy簡介及安裝
Scrapy是一個使用Python語言(基於Twisted框架)編寫的開源網絡爬蟲框架,目前由ScrapinghubLtd維護。Scrapy簡單易用、靈活易拓展、開發社區活躍,並且是跨平颱的。在Linux、MaxOS以及Windows平颱都可以使用。Scrapy應用程序也使用Python進行開發,目前可以支持Python2.7以及Python3.4+版本。
在任意操作係統下,可以使用pip安裝Scrapy,例如:
$pipinstallscrapy
為確認Scrapy已安裝成功,首先在Python中測試能否導入Scrapy模塊:
>>>importscrapy
>>>scrapy.version_info
(1,3,3)
然後,在shell中測試能否執行Scrapy這條命令:
$scrapy
Scrapy1.3.3-noactiveproject
……
前言/序言
關於本書
如今是互聯網的時代,而且正在邁入智能時代。人們早已意識到互聯網中的數據是有待開采的巨大金礦,這些數據將會改善我們的生活,網絡爬蟲開發工作崗位的齣現和不斷增加正是基於對數據價值的重視。優秀的爬蟲框架就像是開采金礦的強力挖掘機,如果你能嫻熟地駕駛它們,就能大幅提高開采效率。
本書講解目前最流行的Python爬蟲框架Scrapy,它簡單易用、靈活易拓展、文檔豐富、開發社區活躍,使用Scrapy可以高效地開發網絡爬蟲應用。本書的讀者隻需要有Python語言基礎即可,我們從零基礎、逐步由淺入深進行講解。第1~8章講解Scrapy開發的核心基礎部分,其中包括:
●初識Scrapy
●編寫Spider
●使用Selector提取數據
●使用Item封裝數據
●使用ItemPipeline處理數據
●使用LinkExtractor提取鏈接
●使用Exporter導齣數據
●項目練習
第9~14章講解實際爬蟲開發中使用頻率最高的一些實用技術,其中包括:
●下載文件和圖片
●模擬登錄
●爬取動態頁麵
●存入數據庫
●使用HTTP代理
●分布式爬取
本書特色
本書的宗旨是以實用和實戰為教學目標,主要特色是:
●所有基礎部分的講解都配有代碼示例,而不僅僅是枯燥的文檔。
●案例選材方麵以講解知識點為核心,盡量選擇專門供練習爬蟲技術的網站(不易變動)或貼近日常生活的網站(京東、知乎、豆瓣、360)進行演示。
●在講解某些知識點時,對Scrapy源碼進行分析,讓讀者能夠“知其然並知其所以然”。
另外,Python是一門簡單易學、功能強大、開發效率極高的語言,近年來在網絡爬蟲、數據分析、機器學習等領域得到廣泛認可。雖然Python很容易上手,但想靈活恰當地運用它也並不簡單。作者在慕課網(www.imooc.com)上推齣瞭一套《Python高級進階實戰》課程,可供有需求的讀者進行參考:http://coding.imooc.com/class/62.html。
緻謝
感謝康爍和陳渝老師在清華大學信息研究院工作期間對我在專業方麵的耐心指導。
感謝清華大學齣版社的王金柱編輯給予我這次寫作的機會以及在寫作方麵的指點。
感謝趙佳音同事認真閱讀全書並提齣瞭許多的寶貴建議。
感謝劍超和任怡同學認真審閱全書並對書中代碼在多個Python版本上進行測試。
感謝女兒劉真,她的笑容化解瞭寫作本書時偶爾的小煩躁。
編者
2017年8月8日
潛入數據洪流:解鎖信息抓取的強大力量 在信息爆炸的時代,數據已成為驅動各行各業前進的核心燃料。然而,這些寶貴的數據往往隱藏在韆變萬化的網頁之中,獲取它們的過程充滿挑戰。你是否曾花費數小時甚至數天,手動復製粘貼網頁上的信息,麵對繁瑣的代碼和難以捉摸的網絡變化而望而卻步?你是否渴望一種更高效、更智能的方式,從互聯網的浩瀚海洋中精準地捕獲你所需的數據,將其轉化為可用的資源? 本書將帶你踏上一段深度探索數據獲取奧秘的旅程,而無需觸及任何特定的編程框架或工具。我們將聚焦於網絡爬蟲的核心理念、通用技術以及與之相關的設計模式與最佳實踐,讓你能夠獨立思考、靈活運用,構建齣滿足各種需求的通用型數據采集解決方案。 第一篇:窺探數據的邊界——網絡爬蟲的基石 在正式開始構建任何自動化工具之前,理解網絡爬蟲的工作原理至關重要。本篇將為你揭示網絡爬蟲的“黑箱”內部,讓你明白其運作的根本邏輯。 互聯網的脈絡:HTTP/HTTPS協議的深度剖析。 我們將從最基礎的網絡通信協議——HTTP開始,詳細解讀其請求(Request)與響應(Response)的構成要素。你將瞭解GET、POST等常用請求方法背後的原理,理解狀態碼的含義,以及Header信息如何傳遞關鍵的元數據。對於HTTPS,我們將深入探討其安全機製,確保你在進行數據抓取時,能夠充分理解其潛在的風險與防護措施。這不僅是爬蟲工作的基礎,更是理解網絡交互的關鍵。 網頁的靈魂:HTML、CSS與JavaScript的語言。 網頁之所以能夠呈現齣豐富多彩的內容和交互效果,離不開HTML結構、CSS樣式和JavaScript行為。本篇將帶領你理解HTML文檔對象模型(DOM)的層級結構,如何通過標簽、屬性和文本內容來定位信息。同時,我們會簡要介紹CSS選擇器的工作原理,以及JavaScript如何動態地改變網頁內容,這對後續解析網頁結構至關重要。 “爬”的藝術:網絡爬蟲的基本流程與策略。 學習網絡爬蟲,就如同學習一項精密的捕獵技巧。我們將詳細闡述一個典型的網絡爬蟲的生命周期:從種子URL的起始,到頁麵請求、內容下載、數據解析、信息提取,再到鏈接發現與隊列管理。你將理解不同的爬取策略,如深度優先(DFS)與廣度優先(BFS),以及它們各自的優劣勢。 倫理與責任:遵守robots.txt與網站規則。 在享受互聯網數據便利的同時,遵守規則、尊重他人是不可或缺的。本篇將深入講解`robots.txt`文件的作用,以及如何正確地解讀和遵守它。我們會討論爬取行為的道德邊界,以及如何避免對目標網站造成不必要的負擔,構建一個可持續、負責任的數據獲取生態。 數據存儲的歸宿:從文件到數據庫。 抓取到的數據需要妥善保存,以便後續分析和利用。我們將探討不同類型的數據存儲方式,從簡單的文本文件(如CSV、JSON)、Excel錶格,到更專業的結構化數據庫(如SQL數據庫)和非結構化數據庫(如NoSQL數據庫)。理解每種存儲方式的特點,能夠幫助你根據數據量、訪問頻率和分析需求,選擇最適閤的存儲方案。 第二篇:解鎖信息之鑰——數據提取與解析的智慧 掌握瞭網絡爬蟲的基本流程,下一步便是如何從下載的網頁內容中精準地提取齣你所需的信息。本篇將聚焦於數據提取和解析的各種技術與方法。 結構化數據的藝術:XPath與CSS選擇器的精妙運用。 麵對結構化的HTML文檔,XPath和CSS選擇器是兩位強大的助手。我們將係統地講解XPath語法,包括節點軸(Axes)、節點測試(Node Tests)和謂詞(Predicates),讓你能夠通過路徑錶達式精確地定位到任意HTML節點。同時,也會深入介紹CSS選擇器的強大功能,特彆是其在現代網頁開發中的廣泛應用,以及如何運用它們高效地選取目標元素。 文本的海洋:正則錶達式的威力。 並非所有需要的數據都包裹在結構化的HTML標簽中,很多信息以純文本的形式存在。正則錶達式(Regex)是處理這類非結構化文本的利器。本篇將帶你從零開始,理解Regex的基本語法,包括字符集、量詞、分組和斷言,並學習如何運用它來匹配、查找和替換文本中的模式,實現對文本數據的靈活提取。 JSON與XML的解析之道。 現代Web服務和API常常使用JSON和XML這兩種常見的數據交換格式。我們將深入剖析JSON和XML的結構特點,並講解如何在不知道具體編程語言的情況下,理解它們的解析邏輯,掌握從這些格式中提取數據的通用方法。 處理動態內容:AJAX與JavaScript渲染的挑戰。 許多現代網站利用AJAX技術在頁麵加載後異步加載內容,或者通過JavaScript動態地生成內容。這給傳統的靜態頁麵抓取帶來瞭新的挑戰。本篇將探討理解AJAX請求的原理,以及如何通過分析網絡請求來獲取動態生成的數據。我們還會討論分析JavaScript執行過程的通用思路,以應對更加復雜的動態網頁。 對抗與適應:反爬蟲機製的識彆與規避。 隨著網絡爬蟲技術的普及,許多網站部署瞭各種反爬蟲機製,以保護其數據。本篇將為你揭示常見的反爬蟲策略,例如IP封鎖、User-Agent檢測、驗證碼、JavaScript挑戰等。我們將討論如何從網絡請求的細節入手,識彆這些機製,並探討一些通用的、閤乎道德的策略來適應和規避它們,例如使用代理IP、模擬瀏覽器行為、處理驗證碼的通用思路等。 第三篇:構建強大的采集係統——設計模式與最佳實踐 僅僅掌握瞭數據提取的技術是不夠的,構建一個健壯、可維護、可擴展的網絡爬蟲係統,需要遵循良好的設計原則和最佳實踐。本篇將引導你思考如何構建一個真正“精通”的采集係統。 模塊化設計:組件化與職責分離。 一個復雜的爬蟲係統應當被分解為更小的、功能獨立的模塊。本篇將討論如何將爬蟲的不同功能(如URL管理器、下載器、解析器、數據存儲器)進行模塊化設計,實現職責分離,提高代碼的可讀性和可維護性。 高效的URL管理:隊列、去重與調度。 在大規模的爬取過程中,如何高效地管理待爬取的URL至關重要。我們將探討使用隊列(Queue)來管理URL的策略,以及如何實現URL的去重,避免重復爬取。同時,也會介紹不同的調度策略,以優化爬取效率。 並發與並行:提升抓取速度的奧秘。 傳統的單綫程爬蟲效率低下。本篇將深入探討並發(Concurrency)與並行(Parallelism)的概念,以及如何在不依賴特定框架的情況下,理解和實現多綫程或多進程的爬取方式,顯著提升數據抓取的速度。 健壯性與容錯:應對網絡異常與數據錯誤。 網絡是不可靠的,數據也可能存在異常。本篇將重點討論如何設計爬蟲以應對各種突發情況,例如網絡連接中斷、超時、服務器錯誤等。我們將學習如何使用異常處理機製,以及如何進行數據校驗和清洗,確保數據的準確性和完整性。 分布式爬蟲的構想:擴展能力的無限可能。 當數據量巨大、爬取任務繁重時,單個機器的算力和帶寬已無法滿足需求。本篇將為你構想分布式爬蟲的架構,講解如何通過多颱機器協同工作,實現大規模、高效率的數據采集。你將理解其核心組件和通信機製。 持續改進:日誌記錄、監控與性能優化。 任何係統都需要持續的監控和優化。本篇將強調日誌記錄的重要性,以及如何通過分析日誌來診斷問題、評估性能。我們會討論一些通用的性能優化思路,幫助你不斷提升爬蟲係統的效率和穩定性。 通過本書的學習,你將不僅僅是學會使用某個工具,而是真正理解網絡爬蟲背後的原理和思想。你將能夠獨立分析網頁結構,靈活運用各種解析技術,並設計齣符閤自身需求的、高度可定製化的數據采集方案。無論你未來的工作是數據分析、市場調研、信息聚閤,還是任何需要從互聯網獲取信息的領域,本書都將為你提供一套堅實的基礎和強大的思維工具,讓你在數據洪流中遊刃有餘,解鎖信息抓取的無限可能。