目 錄
第1章 Python爬蟲概念與Web基礎\t1
1.1 爬蟲概念\t1
1.1.1 什么是爬蟲\t1
1.1.2 爬蟲使用場景的引入\t2
1.1.3 爬蟲的組成部分\t3
1.1.4 模擬請求\t3
1.1.5 數(shù)據解析\t4
1.1.6 數(shù)據保存\t5
1.1.7 爬蟲的學習路線\t5
1.2 HTTP簡述\t6
1.2.1 簡述一次網絡請求過程\t6
1.2.2 URI和URL\t7
1.2.3 HTTP請求報文\t8
1.2.4 HTTP響應報文\t10
1.3 網頁的組成\t13
1.3.1 HTML簡介\t13
1.3.2 CSS選擇器簡介\t16
1.3.3 JavaScript簡介\t17
第2章 Python爬蟲基本庫的使用\t18
2.1 Chrome抓包詳解\t18
2.1.1 Controls\t20
2.1.2 Filter\t21
2.1.3 Request Table\t21
2.2 urllib庫詳解\t23
2.2.1 發(fā)送請求\t23
2.2.2 抓取二進制文件\t24
2.2.3 模擬GET和POST請求\t25
2.2.4 修改請求頭\t26
2.2.5 設置連接超時\t27
2.2.6 延遲提交數(shù)據\t27
2.2.7 設置代理\t27
2.2.8 Cookie\t28
2.2.9 urllib.parse模塊\t29
2.2.10 urllib.error異常處理模塊\t31
2.2.11 urllib.robotparser模塊\t32
2.3 用lxml庫解析網頁節(jié)點\t34
2.3.1 安裝庫\t34
2.3.2 XPath語法速成\t34
2.4 實戰(zhàn):爬取小說《三國演義》\t36
第3章 Python爬蟲抓包與數(shù)據解析\t41
3.1 抓包進階\t41
3.1.1 HTTPS介紹\t42
3.1.2 HTTPS的工作流程\t43
3.1.3 Charles抓包\t43
3.1.4 Packet Capture抓包\t49
3.2 Requests HTTP請求庫\t52
3.2.1 Requests庫簡介\t53
3.2.2 Requests HTTP基本請求\t53
3.2.3 Requests 請求常用設置\t54
3.2.4 Requests 處理返回結果\t54
3.2.5 Requests 處理Cookie\t55
3.2.6 Requests重定向與請求歷史\t55
3.2.7 Requests 錯誤與異常處理\t55
3.2.8 Requests Session會話對象\t55
3.2.9 Requests SSL證書驗證\t56
3.3 實戰(zhàn):爬取微信文章中的圖片、音頻和視頻\t56
3.3.1 爬取標題\t56
3.3.2 爬取圖片\t57
3.3.3 爬取音頻\t58
3.3.4 爬取視頻\t60
3.3.5 代碼整理\t64
3.4 Beautiful Soup解析庫\t67
3.4.1 Beautiful Soup簡介\t67
3.4.2 Beautiful Soup對象實例化\t67
3.4.3 Beautiful Soup的四大對象\t68
3.4.4 Beautiful Soup的各種節(jié)點\t69
3.4.5 Beautiful Soup文檔樹搜索\t69
3.4.6 Beautiful Soup 使用CSS選擇器\t70
3.5 實戰(zhàn):爬取壁紙站點的壁紙\t70
3.6 正則表達式\t74
3.6.1 re模塊\t74
3.6.2 正則規(guī)則詳解\t75
3.6.3 正則練習\t77
3.7 實戰(zhàn):爬取市級編碼列表\t79
3.7.1 獲取所有市級的跳轉鏈接列表\t80
3.7.2 解析表格獲得所有市級天氣鏈接\t81
3.7.3 提取市級編碼\t82
3.7.4 整合調整代碼\t83
第4章 用CSV和Excel存儲數(shù)據\t85
4.1 用CSV文件存儲數(shù)據\t85
4.1.1 CSV寫入\t86
4.1.2 CSV讀取\t87
4.2 實戰(zhàn):爬取星座運勢\t88
4.3 用Excel文件存儲數(shù)據\t89
4.3.1 Excel寫入\t89
4.3.2 Excel讀取\t90
4.4 實戰(zhàn):爬取某音樂平臺排行榜\t91
第5章 用數(shù)據庫存儲數(shù)據\t99
5.1 MySQL數(shù)據庫\t99
5.1.1 安裝MySQL\t100
5.1.2 在Windows環(huán)境下安裝MySQL\t100
5.1.3 在Windows環(huán)境下配置MYSQL_HOME環(huán)境變量\t101
5.1.4 在Windows環(huán)境下設置MySQL登錄密碼\t101
5.1.5 在Windows環(huán)境下啟動或關閉MySQL服務\t102
5.1.6 Mac環(huán)境\t103
5.1.7 Ubuntu環(huán)境\t103
5.1.8 MySQL的基本操作\t104
5.1.9 MySQL數(shù)據庫語法速成\t106
5.1.10 Python連接MySQL數(shù)據庫\t110
5.1.11 MySQL特殊符號和表情問題\t114
5.1.12 實戰(zhàn):抓取某技術網站數(shù)據\t115
5.2 數(shù)據庫可視化工具DataGrip\t122
5.2.1 建立數(shù)據庫關聯(lián)\t122
5.2.2 編寫SQL語句\t123
5.2.3 常見問題:連接遠程主機\t124
5.3 Redis數(shù)據庫\t125
5.3.1 安裝Redis\t126
5.3.2 redis-py庫的安裝\t130
5.3.3 redis-py基本操作示例\t130
5.3.4 實戰(zhàn):爬取視頻彈幕并保存到Redis\t134
5.4 MongoDB數(shù)據庫\t137
5.4.1 安裝MongoDB\t137
5.4.2 安裝PyMongo庫\t140
5.4.3 PyMongo基本操作示例\t140
5.4.4 實戰(zhàn):爬取某電商網站關鍵字搜索結果并保存到MongoDB\t144
第6章 Python應對反爬蟲策略\t148
6.1 反爬蟲概述\t148
6.1.1 為什么會出現(xiàn)反爬蟲\t149
6.1.2 常見的爬蟲與反爬蟲大戰(zhàn)\t149
6.2 反爬蟲策略\t150
6.2.1 User-Agent限制\t150
6.2.2 302重定向\t151
6.2.3 IP限制\t151
6.2.4 什么是網絡代理\t151
6.2.5 如何獲取代理IP\t151
6.2.6 ADSL撥號代理\t152
6.2.7 Squid 配置代理緩存服務器\t156
6.2.8 TinyProxy配置代理緩存服務器\t158
6.2.9 Cookie限制\t159
6.3 JavaScript反爬蟲策略\t159
6.3.1 Ajax動態(tài)加載數(shù)據\t159
6.3.2 實戰(zhàn):爬取某素材網內容分析\t159
6.3.3 數(shù)據請求分析\t160
6.3.4 編寫代碼\t163
6.4 Selenium模擬瀏覽器操作\t166
6.4.1 Selenium簡介\t166
6.4.2 安裝Selenium\t167
6.4.3 Selenium常用函數(shù)\t168
6.5 實戰(zhàn):爬取某網站的特定圖\t172
6.6 PhantomJS\t175
6.6.1 在Windows上安裝PhantomJS\t175
6.6.2 在Mac上安裝PhantomJS\t175
6.6.3 在Ubuntu上安裝PhantomJS\t176
6.6.4 關于PhantomJS的重要說明\t176
6.7 常見驗證碼策略\t176
6.7.1 圖片驗證碼\t177
6.7.2 實戰(zhàn):實現(xiàn)圖片驗證碼自動登錄\t178
6.7.3 實戰(zhàn):實現(xiàn)滑動驗證碼自動登錄\t185
第7章 Python爬蟲框架Scrapy(上)\t196
7.1 Scrapy框架簡介與安裝\t197
7.1.1 Scrapy相關信息\t197
7.1.2 Scrapy的安裝\t197
7.2 實戰(zhàn):爬取某網站每日壁紙\t199
7.2.1 抓取目標分析\t199
7.2.2 創(chuàng)建爬蟲腳本\t201
7.2.3 編寫爬蟲腳本\t202
7.2.4 運行爬蟲腳本\t203
7.2.5 解析數(shù)據\t203
7.3 Scrapy架構簡介\t204
7.3.1 Scrapy架構圖\t204
7.3.2 各個模塊間的協(xié)作流程\t205
7.3.3 協(xié)作流程擬人化對話版\t206
7.4 Spider詳解\t207
7.4.1 Spider的主要屬性和函數(shù)\t207
7.4.2 Spider運行流程\t207
7.5 Request類和Response類\t209
7.5.1 Request詳解\t209
7.5.2 Response類常用參數(shù)、方法與子類\t210
7.5.3 選擇器\t211
7.5.4 Scrapy Shell\t212
7.6 Item詳解\t213
7.7 Item Pipeline詳解\t213
7.7.1 自定義Item Pipeline類\t213
7.7.2 啟用Item Pipeline\t214
7.8 實戰(zhàn):完善爬取每日壁紙的腳本\t214
7.8.1 定義BingItem\t215
7.8.2 使用ImagesPipeline\t215
7.8.3 修改Spider代碼\t216
7.8.4 運行爬蟲腳本\t216
7.9 設置請求頭\t217
7.9.1 構造Request時傳入\t217
7.9.2 修改settings.py文件\t217
7.9.3 為爬蟲添加custom_settings字段\t218
7.10 下載中間件詳解\t218
7.10.1 自定義Downloader Middleware類\t218
7.10.2 啟用自定義的代理下載中間件\t219
7.11 實戰(zhàn):爬取某站點繪畫頻道的圖片\t219
7.11.1 分析爬取的站點\t219
7.11.2 新建項目與明確爬取目標\t221
7.11.3 創(chuàng)建爬蟲爬取網頁\t221
7.11.4 設置代理\t223
7.11.5 解析數(shù)據\t223
7.11.6 存儲數(shù)據\t224
7.11.7 完善代碼\t226
第8章 Python爬蟲框架Scrapy(下)\t228
8.1 Scrapy對接Selenium\t228
8.1.1 如何對接\t228
8.1.2 對接示例:爬取某網站首頁文章\t229
8.2 實戰(zhàn):用Scrapy實現(xiàn)一個簡單的代理池\t232
8.2.1 代理池的設計\t232
8.2.2 創(chuàng)建項目\t232
8.2.3 編寫獲取IP的爬蟲\t233
8.2.4 編寫檢測IP的爬蟲\t238
8.2.5 編寫調度程序\t240
8.2.6 編寫獲取代理IP的接口\t241
8.2.7 使用代理\t243
8.3 用Scrapyrt調度Scrapy\t243
8.3.1 相關文檔與安裝Scrapyrt\t243
8.3.2 Scrapyrt GET請求相關參數(shù)\t244
8.3.3 Scrapyrt POST請求相關參數(shù)\t246
8.4 用Docker部署Scrapy\t246
8.4.1 Docker簡介\t246
8.4.2 下載并安裝Docker\t247
8.4.3 創(chuàng)建Dockerfile\t249
8.4.4 構建Docker鏡像\t250
8.4.5 把生成的Docker鏡像推送到Docker Hub\t251
8.4.6 在云服務器上運行Docker鏡像\t253
第9章 數(shù)據分析案例:Python崗位行情\t254
9.1 數(shù)據爬取\t254
9.2 NumPy庫和pandas庫\t258
9.2.1 ndarray數(shù)組\t259
9.2.2 ndarray數(shù)組的常用操作\t260
9.2.3 pandas庫\t263
9.3 用Matplotlib實現(xiàn)數(shù)據可視化\t268
9.3.1 Matplotlib中文亂碼問題\t269
9.3.2 Matplotlib繪制顯示不全\t270
9.3.3 用Matplotlib生成圖表并進行分析\t271
9.4 用Wordcloud庫進行詞云繪制\t275
9.4.1 Wordcloud簡介\t275
9.4.2 Wordcloud構造函數(shù)與常用方法\t276
9.4.3 詞云繪制\t277
9.5 小結\t280
第10章 數(shù)據分析案例:某婚戀網站交友情況分析\t281
10.1 數(shù)據爬取\t281
10.2 安裝Jupyter Notebook\t287
10.3 安裝pyecharts\t288
10.4 數(shù)據分析\t289
10.4.1 讀取CSV文件里的數(shù)據\t289
10.4.2 分析身高\t290
10.4.3 分析學歷\t292
10.4.4 分析年齡\t292
10.4.5 分析城市\(zhòng)t294
10.4.6 分析交友宣言\t294
10.5 小結\t296