□□ 章 爬蟲(chóng)程序的構(gòu)成和完整鏈條 . 1
1.1 一個(gè)簡(jiǎn)單的爬蟲(chóng)程序 . 1
1.□ 爬蟲(chóng)的完整鏈條 . 3
1.3 爬取下來(lái)的數(shù)據(jù)被用在什么地方 . 7
1.4 爬蟲(chóng)工程師常用的庫(kù) . 11
1.4.1 網(wǎng)絡(luò)請(qǐng)求庫(kù) . 11
1.4.□ 網(wǎng)頁(yè)文本解析. 19
1.5 數(shù)據(jù)存儲(chǔ) . 30
1.5.1 將數(shù)據(jù)存入MySQL 數(shù)據(jù)庫(kù) . 31
1.5.□ 將數(shù)據(jù)存入MongoDB 數(shù)據(jù)庫(kù) . 34
1.5.3 將數(shù)據(jù)存入Redis 數(shù)據(jù)庫(kù) . 36
1.5.4 Excel 文件的讀寫(xiě) . 38
1.6 小試牛刀——出版社新聞資訊爬蟲(chóng) . 4□
實(shí)踐題 . 46
本章小結(jié) . 47
第□ 章 自動(dòng)化工具的使用 . 48
□.1 網(wǎng)頁(yè)渲染工具 . 48
□.1.1 WebDriver 是什么 . 51
□.1.□ Selenium 的介紹和基本使用 . 5□
□.1.3 Pyppeteer 的介紹和基本使用 . 59
□.1.4 Splash 知識(shí)擴(kuò)展 . 61
本節(jié)小結(jié) . 6□
□.□ App 自動(dòng)化工具 . 6□
□.□.1 Android 調(diào)試橋 . 6□
□.□.□ Airtest Project 與Poco . 64
VIII Python3 網(wǎng)絡(luò)爬蟲(chóng)寶典
□.□.3 爬取App 中的圖片 . 75
□.□.4 控制多臺(tái)設(shè)備. 78
本節(jié)小結(jié) . 79
實(shí)踐題 . 79
本章小結(jié) . 79
第3 章 增量爬取的原理與實(shí)現(xiàn) . 80
3.1 增量爬取的分類(lèi)和實(shí)現(xiàn)原理 . 81
3.1.1 增量爬取的分類(lèi) . 81
3.1.□ 增量爬取的實(shí)現(xiàn)原理 . 83
本節(jié)小結(jié) . 88
3.□ 增量池的復(fù)雜度和效率 . 88
3.□.1 增量池的時(shí)間復(fù)雜度 . 88
3.□.□ 增量池的空間復(fù)雜度 . 95
本節(jié)小結(jié) . 103
3.3 Redis 的數(shù)據(jù)持久化 . 103
3.3.1 持久化方式的分類(lèi)和特點(diǎn) . 103
3.3.□ RDB 持久化的實(shí)踐 . 106
3.3.3 AOF 持久化的實(shí)踐 . 11□
3.3.4 Redis 密碼持久化 . 115
本節(jié)小結(jié) . 115
實(shí)踐題 . 115
本章小結(jié) . 116
第4 章 分布式爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn) . 117
4.1 分布式爬蟲(chóng)的原理和分類(lèi) . 117
4.1.1 分布式爬蟲(chóng)的原理 . 117
4.1.□ 分布式爬蟲(chóng)的分類(lèi) . 1□0
4.1.3 共享隊(duì)列的選擇 . 1□□
本節(jié)小結(jié) . 1□5
4.□ 分布式爬蟲(chóng)庫(kù)Scrapy-Redis . 1□6
4.□.1 Scrapy-Redis 的介紹和基本使用 . 1□7
4.□.□ 去重器、調(diào)度器和隊(duì)列的源碼解析 . 1□9
目錄 IX
本節(jié)小結(jié) . 134
4.3 基于Redis 的分布式爬蟲(chóng) . 134
4.3.1 對(duì)等分布式爬蟲(chóng)的實(shí)現(xiàn) . 135
4.3.□ 主從分布式爬蟲(chóng)的實(shí)現(xiàn) . 139
本節(jié)小結(jié) . 141
4.4 基于RabbitMQ 的分布式爬蟲(chóng) . 141
4.4.1 RabbitMQ 的安裝和基本操作 . 14□
4.4.□ 分布式爬蟲(chóng)的具體實(shí)現(xiàn) . 146
本節(jié)小結(jié) . 15□
實(shí)踐題 . 15□
本章小結(jié) . 15□
第5 章 網(wǎng)頁(yè)正文自動(dòng)化提取方法 . 153
5.1 Python Readability . 155
5.□ 基于文本及符號(hào)密度的網(wǎng)頁(yè)正文提取方法 . 158
5.3 GeneralNewsExtractor . 16□
5.3.1 GeneralNewsExtractor 的安裝和使用 . 16□
5.3.□ GeneralNewsExtractor 的源碼解讀 . 165
本節(jié)小結(jié) . 175
本章小結(jié) . 175
第6 章 Python 項(xiàng)目打包部署與定時(shí)調(diào)度 . 176
6.1 如何判斷項(xiàng)目是否需要部署 . 176
6.□ 爬蟲(chóng)部署平臺(tái)Scrapyd . 179
6.□.1 Scrapyd 的安裝和服務(wù)啟動(dòng) . 179
6.□.□ 爬蟲(chóng)項(xiàng)目的打包和部署 . 180
本節(jié)小結(jié) . 184
6.3 Scrapyd 源碼深度剖析 . 185
6.4 項(xiàng)目打包與解包運(yùn)行實(shí)戰(zhàn) . 197
6.4.1 用Setuptools 打包項(xiàng)目 . 197
6.4.□ 運(yùn)行EGG 包中的Python 項(xiàng)目 . 199
6.4.3 編碼實(shí)現(xiàn)Python 項(xiàng)目打包 . □01
本節(jié)小結(jié) . □03
X Python3 網(wǎng)絡(luò)爬蟲(chóng)寶典
6.5 定時(shí)功能 . □03
6.5.1 操作系統(tǒng)提供的定時(shí)功能 . □03
6.5.□ 編程語(yǔ)言實(shí)現(xiàn)的定時(shí)功能 . □06
6.5.3 APScheduler . □09
本節(jié)小結(jié) . □1□
6.6 實(shí)戰(zhàn):開(kāi)發(fā)Python 項(xiàng)目管理平臺(tái)Sailboat . □1□
6.6.1 Sailboat 的模塊規(guī)劃和技術(shù)選型 . □1□
6.6.□ Sailboat 的權(quán)限設(shè)計(jì)思路 . □14
6.6.3 Sailboat 的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) . □15
6.6.4 Sailboat 基礎(chǔ)結(jié)構(gòu)的搭建 . □18
6.6.5 Sailboat 用戶(hù)注冊(cè)和登錄接口的編寫(xiě) . □□0
6.6.6 Sailboat 權(quán)限驗(yàn)證裝飾器的編寫(xiě) . □□9
6.6.7 Sailboat 項(xiàng)目部署接口和文件操作對(duì)象的編寫(xiě) . □3□
6.6.8 Sailboat 項(xiàng)目調(diào)度接口的編寫(xiě) . □40
6.6.9 Sailboat 執(zhí)行器的編寫(xiě)和日志的生成 . □43
6.6.10 Sailboat 定時(shí)調(diào)度功能的實(shí)現(xiàn) . □48
6.6.11 Sailboat 異常監(jiān)控和釘釘機(jī)器人通知功能的編寫(xiě) . □49
本節(jié)小結(jié) . □58
6.7 分布式調(diào)度平臺(tái)Crawlab 核心架構(gòu)解析 . □59
實(shí)踐題 . □6□
本章小結(jié) . □6□