Python3網絡爬蟲寶典( 簡體 字) | |
作者:韋世東 | 類別:1. -> 程式設計 -> Python 2. -> 程式設計 -> 網路爬蟲 |
出版社:電子工業出版社 | 3dWoo書號: 53355 詢問書籍請說出此書號! 有庫存 NT售價: 395 元 |
出版日:9/1/2020 | |
頁數:272 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121394065 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1 章 爬蟲程序的構成和完整鏈條 ........ 1
1.1 一個簡單的爬蟲程序 .......... 1 1.2 爬蟲的完整鏈條 .......... 3 1.3 爬取下來的數據被用在什么地方 ........ 7 1.4 爬蟲工程師常用的庫 .......... 11 1.4.1 網絡請求庫 .......... 11 1.4.2 網頁文本解析......... 19 1.5 數據存儲 ............ 30 1.5.1 將數據存入MySQL 數據庫 ........ 31 1.5.2 將數據存入MongoDB 數據庫 ...... 34 1.5.3 將數據存入Redis 數據庫 ........ 36 1.5.4 Excel 文件的讀寫 ........ 38 1.6 小試牛刀——出版社新聞資訊爬蟲 ....... 42 實踐題 ............. 46 本章小結 ............. 47 第2 章 自動化工具的使用 .......... 48 2.1 網頁渲染工具 .......... 48 2.1.1 WebDriver 是什么 ........ 51 2.1.2 Selenium 的介紹和基本使用 ....... 52 2.1.3 Pyppeteer 的介紹和基本使用 ...... 59 2.1.4 Splash 知識擴展 ......... 61 本節小結 ............ 62 2.2 App 自動化工具 .......... 62 2.2.1 Android 調試橋 .......... 62 2.2.2 Airtest Project 與Poco ......... 64 VIII Python3 網絡爬蟲寶典 2.2.3 爬取App 中的圖片 ........ 75 2.2.4 控制多臺設備......... 78 本節小結 ............ 79 實踐題 ............. 79 本章小結 ............. 79 第3 章 增量爬取的原理與實現 .......... 80 3.1 增量爬取的分類和實現原理 ........ 81 3.1.1 增量爬取的分類 ......... 81 3.1.2 增量爬取的實現原理 ......... 83 本節小結 ............ 88 3.2 增量池的復雜度和效率 .......... 88 3.2.1 增量池的時間復雜度 ......... 88 3.2.2 增量池的空間復雜度 ......... 95 本節小結 ............ 103 3.3 Redis 的數據持久化 .......... 103 3.3.1 持久化方式的分類和特點 ....... 103 3.3.2 RDB 持久化的實踐 ......... 106 3.3.3 AOF 持久化的實踐 ........ 112 3.3.4 Redis 密碼持久化 ........ 115 本節小結 ............ 115 實踐題 ............. 115 本章小結 ............. 116 第4 章 分布式爬蟲的設計與實現 ........ 117 4.1 分布式爬蟲的原理和分類 ........ 117 4.1.1 分布式爬蟲的原理 ......... 117 4.1.2 分布式爬蟲的分類 ......... 120 4.1.3 共享隊列的選擇 ......... 122 本節小結 ............ 125 4.2 分布式爬蟲庫Scrapy-Redis ........ 126 4.2.1 Scrapy-Redis 的介紹和基本使用 ...... 127 4.2.2 去重器、調度器和隊列的源碼解析 ..... 129 目錄 IX 本節小結 ............ 134 4.3 基于Redis 的分布式爬蟲 ......... 134 4.3.1 對等分布式爬蟲的實現 ....... 135 4.3.2 主從分布式爬蟲的實現 ....... 139 本節小結 ............ 141 4.4 基于RabbitMQ 的分布式爬蟲 ....... 141 4.4.1 RabbitMQ 的安裝和基本操作 ....... 142 4.4.2 分布式爬蟲的具體實現 ....... 146 本節小結 ............ 152 實踐題 ............. 152 本章小結 ............. 152 第5 章 網頁正文自動化提取方法 ........ 153 5.1 Python Readability ......... 155 5.2 基于文本及符號密度的網頁正文提取方法 ..... 158 5.3 GeneralNewsExtractor .......... 162 5.3.1 GeneralNewsExtractor 的安裝和使用 ..... 162 5.3.2 GeneralNewsExtractor 的源碼解讀 ..... 165 本節小結 ............ 175 本章小結 ............. 175 第6 章 Python 項目打包部署與定時調度 ....... 176 6.1 如何判斷項目是否需要部署 ........ 176 6.2 爬蟲部署平臺Scrapyd .......... 179 6.2.1 Scrapyd 的安裝和服務啟動 ....... 179 6.2.2 爬蟲項目的打包和部署 ....... 180 本節小結 ............ 184 6.3 Scrapyd 源碼深度剖析 .......... 185 6.4 項目打包與解包運行實戰 ........ 197 6.4.1 用Setuptools 打包項目 ........ 197 6.4.2 運行EGG 包中的Python 項目 ....... 199 6.4.3 編碼實現Python 項目打包 ....... 201 本節小結 ............ 203 X Python3 網絡爬蟲寶典 6.5 定時功能 ............ 203 6.5.1 操作系統提供的定時功能 ....... 203 6.5.2 編程語言實現的定時功能 ....... 206 6.5.3 APScheduler ......... 209 本節小結 ............ 212 6.6 實戰:開發Python 項目管理平臺Sailboat ..... 212 6.6.1 Sailboat 的模塊規劃和技術選型 ....... 212 6.6.2 Sailboat 的權限設計思路 ....... 214 6.6.3 Sailboat 的數據結構設計 ....... 215 6.6.4 Sailboat 基礎結構的搭建 ....... 218 6.6.5 Sailboat 用戶注冊和登錄接口的編寫 ..... 220 6.6.6 Sailboat 權限驗證裝飾器的編寫 ....... 229 6.6.7 Sailboat 項目部署接口和文件操作對象的編寫 ... 232 6.6.8 Sailboat 項目調度接口的編寫 ....... 240 6.6.9 Sailboat 執行器的編寫和日志的生成 ..... 243 6.6.10 Sailboat 定時調度功能的實現 ....... 248 6.6.11 Sailboat 異常監控和釘釘機器人通知功能的編寫 ... 249 本節小結 ............ 258 6.7 分布式調度平臺Crawlab 核心架構解析 ..... 259 實踐題 ............. 262 本章小結 ............. 262 Python3是當前市面上極受歡迎的人工智能和網絡爬蟲語言。本書介紹了爬蟲方面更深入的知識。書中首先回顧了爬蟲的基礎知識;然后詳細介紹爬蟲常用工具與庫的相關知識;接著學習 Redis, 為后面的學習打下基礎;然后討論了 Redis 在分布式爬蟲中的作用以及分布式爬蟲的原理、分類與實現方法;再進一步學習增量爬取的原理與實現方法;然后通過學習網頁文本抽取方法和智能抽取方法實現了大規模、多網站的數據爬取;在部署方面通過了解、剖析成熟穩定的爬蟲部署平臺 Scrapyd,并根據實際業務需求重新構建了一套兼容性更強的爬蟲部署平臺;最后學習了 Python 中常用的幾個任務調度庫與框架,通過了解 Celery 邏輯與結構,我們掌握了調度相關的知識,并根據實際業務需求構建了一套支持動態任務增刪的任務調度平臺。
爬蟲技術是當今數據時代不可或缺的搬運技術。爬蟲技術在金融、房產、科技和貿易等領域中產生了很大的正向作用。企業日益增長的數據需求創造了非常多的爬蟲崗位,Python 語言的蓬勃發展則造就了一大批優秀的爬蟲工程師。
Python 語言的學習門檻低,也降低了爬蟲技術的學習門檻。爬蟲技術的發展與業務需求緊密相連,對于數據量大、數據質量要求高且講求實效性的團隊來說,如何在單位時間內獲取到更多數據以及如何確保數據源的穩定性和準確率是一個不小的挑戰。其中涉及時間復雜度、空間復雜度、高效率、高可用、高準確率和高穩定性等諸多知識。很多開發者學習爬蟲技術時會有“很容易”的感覺,但在實際工作中卻處處 碰壁,每天都會遇到各種各樣的技術挑戰。因此,爬蟲技術的學習門檻低,但技術上限非常高,工資上限也非常高。 爬蟲是一門綜合技術,你不僅要學習如何發出網絡請求、如何解析網頁文本、如何將數據保存到數據庫中,還需要掌握能顯著提高單體爬取效率的異步I/O 知識、能在單位時間內獲取到更多數據的分布式爬蟲相關知識、保證數據源穩定性的爬蟲設計、高準確率的網頁正文自動化提取方法、在貼近業務需求情況下優選的有效降低時間復雜度和空間復雜度的方法,以及分布式結構下多個節點通信、文件同步等。 本書內容均來自實際的業務需求,大部分都是爬蟲工程師正面臨的問題。我希望通過梳理和總結以往工作中的經驗,幫助更多開發者了解并掌握在實際工作中需要用到的與爬蟲技術相關的知識。 本書內容 本書共6 章,各章內容歸納如下。 第1 章介紹了爬蟲程序的構成和完整鏈條。首先從一個簡單的爬蟲程序開始,學習了爬蟲工程師常用的網絡請求庫和文本解析庫;然后學習如何將數據分別存入MySQL 數據庫、MongoDB 數據庫、Redis 數據庫和Excel 文件;最后以電子工業出版社新聞資訊頁爬蟲為例,演示了分析、發出網絡請求、解析文本和數據入庫的完整流程,這為我們后面的學習打下了堅實的基礎。 第2 章介紹了自動化工具的使用。首先通過一個真實的需求案例了解爬蟲工程師為什么需要自動化工具,然后介紹了WebDriver 的相關知識,學習了爬蟲工程師常用的兩款自動化工具——Selenium 和Pyppeteer 的基本使用。在2.2 節我們學習App 自動化工具的知識和基本使用,并動手實現了對App 文字內容和圖片內容的爬取。 第3 章介紹了增量爬取的原理與實現。我們從一個真實的爬取需求了解到增量爬取的必要性,然后學習增量爬取的分類和不同增量類型的實現原理。要做增量爬取必然要考慮增量池的時間復雜度或空間復雜度,在3.2 節中我們通過一個實際的需求延伸到增量池的時間復雜度和空間復雜度,并從準確的數值中找到合適的增量實現方式。 由于Redis 的高性能,很多爬蟲工程師都會選擇Redis 作為URL 增量池,這時候我們不得不考慮Redis 數據持久化的方案,3.3 節介紹了Redis 持久化方式的分類和特點,并動手實踐了不同類型的持久化。 第4 章介紹了分布式爬蟲的設計與實現。面對海量的數據或者緊迫的時間,我們需要尋找一種穩定、高效的爬取方法,分布式爬蟲無疑是我們的最佳選擇。在4.1 節中,我們通過實際的需求案例了解爬蟲工程師為什么需要分布式爬蟲、分布式爬蟲的原理、分布式爬蟲的分類和共享隊列的選擇等。在4.2 節中,我們剖析了爬蟲業內著名的Scrapy-Redis 庫的源碼,從而了解到分布式爬蟲具體的工程實現。通過第2 章的 學習,我們了解到Redis 在分布式爬蟲結構中的應用,于是在4.3 節中我們動手實現了對等分布式爬蟲和主從分布式爬蟲。相對于Redis 來說,消息中間件能夠確保每一條消息都能被消費,不會產生數據丟失的情況,這使得消息中間件受到很多中高級爬蟲工程師的青睞,于是在4.4 節中我們學習并動手實踐基于消息中間件應用RabbitMQ的分布式爬蟲。 第5 章介紹了網頁正文自動化提取方法。以往我們討論的都是針對單個網站的聚焦爬蟲,每個網站的頁面在解析時都需要有一套對應的解析規則,但如果你的上司要求你爬取1000 個網站,你該怎么辦呢?這時候你需要一個能夠幫助你自動識別和提取網頁正文的工具——Readability。在5.1 節中,我們學習爬蟲業內著名的網頁正文提取工具Readability 的基本使用,并體驗到它那“令人驚嘆”的正文提取效果。這時候你肯定會好奇,這種工具如何判斷哪部分內容是廣告,哪部分內容是正文呢?它又是如何清除那些雜亂的文本,最后將正文返回的呢?在5.2 節中,我們通過閱讀論文《基于文本及符號密度的網頁正文提取方法》了解將數學和HTML 特性結合到一起的威力——準確率高達 99%以上的網頁正文提取方法。《基于文本及符號密度的網頁正文提取方法》已經有了具體的代碼實現,5.3 節中我們剖析了eneralNewsExtractor 庫的源碼,以深入了解《基于文本及符號密度的網頁正文提取方法》具體的工程實現,從而掌握這套算法。 第6 章介紹了Python 項目打包部署與定時調度的相關知識。首先我們從“如何判斷項目是否需要部署”開始學習,然后學習爬蟲業內著名的爬蟲部署平臺Scrapyd 的基本使用,接著剖析Scrapyd 源碼,以了解Python 項目打包和解包運行的工程實現。 爬蟲本身的業務特性使得爬蟲項目需要用到定時調度,我們在6.5 節中學習操作系統級定時調度和編程語言級定時調度的具體實現,同時學習Python 領域備受工程師青睞的定時任務庫APScheduler 的結構和基本使用。掌握了前面講解的知識后,你一定迫不及待地想要自己編寫一款Python 領域通用的項目部署與調度平臺,在6.6 節中,我們將學習如何設計和編碼實現一款這樣的平臺,平臺功能包括權限控制、項目打包與部署、定時調度、異常監控和釘釘機器人通知等。6.7 節中解析了分布式調度平臺Crawlab 的核心架構,學習到分布式架構中節點通信、文件同步、任務調度和節點健康監控等知識。相信你在掌握這些知識后,技術能力和工資都將更上一層樓。 閱讀建議 這是一本圍繞著爬蟲具體業務展開的書,書中提到了中高級爬蟲工程師在實際工作當中常常遇到的問題和代碼實踐。這些知識并不具有強連貫性和依賴性,在閱讀時可根據自己的需求直接閱讀對應的章節,無須按章節順序逐一閱讀。動手實踐很重要,千萬不要依賴書本提供的代碼,如果你在學習過程中能夠自己動手寫代碼,相信你的進步一定會很快。 致謝 本書的順利編寫,得益于家人和朋友的幫助。首先感謝我的家人,我的爸爸媽媽、岳父岳母、夫人、妹妹和我的女兒。有了他們的支持,我才能用心寫作。 特別感謝崔慶才(靜覓)在我學習路上和寫作期間給予的幫助。 感謝開源項目Crawlab 作者張冶青(Marvin)為本書提供的技術支持。 感謝夜幕團隊隊友們對我的幫助,他們是我迷茫時的明燈、三岔路口的指示牌。 感謝匡水平在本書寫作期間提供的幫助。 感謝開源項目GeneralNewsExtractor 作者謝乾坤(Kingname)為本書提供的技術支持。 感謝在我學習過程中與我探討技術的各位朋友,QQ 群群友和微信群群友,他們對技術的研究和原理探究的精神帶動著我,使我學到不少知識。 感謝掘金社區為本書提供的支持。 感謝林瑞和編輯,他在書稿立項和寫作過程中給我提供了很多建議和幫助。 感謝在我學習之路和寫作過程中提供幫助的每一個人。 免責聲明 書中所有內容僅供技術學習與研究,本書提倡讀者遵守國家法律法規,切勿將本書講解的爬蟲技術用于非法用途。 相關資源 書中用到的代碼片段存放在GitHub 倉庫,具體網址請在電子工業出版社博文視點官網的本書頁面下載,代碼倉庫與本書章節的對應關系可查閱倉庫中的README.md 文件。 我是一名爬蟲工程師,同時也是Python 開發者和Golang 開發者。我會在微信公眾號和技術博客中更新相關的技術文章,歡迎讀者訪問交流。當然,大家也可以添加我的微信,期待和你共同進步,一起變強! 韋世東 2020 年3 月 |