內容簡介
作為一個自學爬蟲的過來人,曾經走過很多彎路,在自學的道路上也迷茫過。每次面對一個全新的網站端炒組,都像是踏進一個未知的世界。你不知道前面有哪些反爬手段在等講設著你;你不知道你會踩進哪個坑裡。我做爬蟲的幾年時間裡,爬過很多的網站、遇到過很多的難題。這本書就是我這幾年經驗的總結,從開始的工具的學習使用,到實戰項目的爬取,難度一步一步的升級,需求也越來越複雜,有各式各樣的爬取方式。
本書主要內容與數據爬取相關,包括編寫爬蟲所需要的基礎編程知識,如Requests包、Scrapy框架和資料庫的使用,到項目實戰教程,適合Python基礎入門的讀者。如果龍多乃你是其他行業的從業者,想進入IT行業成為一位爬蟲工程師,又或者你已經是IT行業的從業者,本書在能夠讓你在對爬蟲工程師的乃灶采達工作內容有所了解的同時,也能讓你掌握作為一個爬蟲工程師所需要具備的基礎技能。
圖書目錄
第一篇 基礎知識
第1章 Python環境搭建
1.1 Python的安裝 2
1.1.1 Windows下Python的安裝 2
1.1.2 Mac OS X下Python的安裝 3
1.1.3 Linux下Python的安裝 3
1.1.4 安裝pip工具 4
1.2 虛擬環境Virtualenv 5
1.2.1 Virtualenv的安裝 5
1.2.2 創建虛擬環境 5
1.2.3 激活虛擬環境 5
1.2.4 創建指定Python版本的虛擬環境 5
1.3 選擇合適的編輯器 6
1.3.1 Vim 6
1.3.2 Atom 6
1.3.3 Sublime Text 6
1.3.4 Notepad++ 6
1.3.5 Pycharm 6
第2章 常用爬蟲庫Requests
2.1 安裝Requests 7
2.1.1 用pip安裝 7
2.1.2 用github源碼安裝 7
2.1.3 用curl安裝 7
2.2 了解 Requests的功循墓棵能 8
2.2.1 使用GET和POST傳送請求 8
2.2.2 通過URL傳遞參數 9
2.2.3 設定逾時 9
2.2.4 查看返回內容 9
2.2.5 設定請求頭 10
2.2.6 更多複雜的Post請求 10
2.2.7 返回對象狀態碼 12
2.2.8 設定代理IP 13
2.3 BeautifulSoup的安裝和使用 14
2.3.1 使用pip安裝BeautifulSoup 14
2.3.2 使用BeautifulSoup定位元素 14
2.4 初識自動化測試工具Selenium 15
2.4.1 Selenium安裝 15
2.4.2 使烏府獄用Selnium爬取網站 15
2.5 Selenium定位元素 16
2.5.1 通過屬性定位 17
2.5.2 通過xpath定位 17
2.6 Selenium反爬設定 18
2.6.1 設定請求頭 18
2.6.2 設定代理IP 19
第3章 常用爬蟲框架Scrapy
3.1 認識Scrapy 21
3.1.1 Scrapy爬取quotes簡單示例 21
3.1.2 安裝所需依賴包 23
3.1.3 使用虛擬環境 23
3.2 Scrapy shell的使用 24
3.2.1 運行shell 24
3.2.2 使用Scrapy shell爬取Scrapy.org 24
3.2.3 爬蟲調用shell 26
3.3 使用Scrapy爬取quotes 26
3.3.1 創建Scrapy項目並新建爬蟲 27
3.3.2 爬取和提取數據 27
3.3.3 通過腳本運行Scrapy爬蟲 29
3.3.4 在同一進程下運行坑危跨促多個爬蟲 29
3.3.5 簡易的分散式爬蟲思路 30
3.3.6 防止爬蟲被ban 31
3.4 setting基本配置 31
3.5 Pipeline模組 32
3.5.1 爬取文字板塊 32
3.5.2 編寫Pipeline模組 35
3.5.3 通過Pipeline將數據寫入MongoDB資料庫 36
3.5.4 ImagesPipeline處理圖片 37
3.5.5 FilePipeline下載檔案 40
3.6 Middleware中間件 41
3.6.1 Downloader Middleware 41
3.6.2 隨機請求頭中間件 42
3.6.3 更換代理IP中間件 45
3.6.4 通過Downloader Middleware使用Selenium 46
3.6.5 Spider Middleware 47
3.7 新功能拓展 48
3.7.1 信號signals 48
3.7.2 自定義拓展 51
第4章 數據存儲——資料庫的選擇
4.1 MySQL資料庫 53
4.1.1 MySQL的安裝 53
4.1.2 幾款可視化工具 54
4.1.3 資料庫連線 55
4.1.4 資料庫插入操作 55
4.1.5 資料庫查詢 56
4.1.6 資料庫更新操作 56
4.1.7 爬取寫入資料庫 57
4.2 MongoDB資料庫 58
4.2.1 MongoDB安裝 58
4.2.2 連線資料庫 59
4.2.3 查詢資料庫 59
4.2.4 插入和更新資料庫 59
4.2.5 爬取數據並插入到MongoDB資料庫中 60
4.3 Redis資料庫 60
4.3.1 Redis安裝 60
4.3.2 連線Redis資料庫 61
4.3.3 Python操作Redis資料庫 61
4.3.4 爬取並寫入Redis做快取 62
第5章 效率為王——分散式爬蟲
5.1 什麼是分散式爬蟲 64
5.1.1 分散式爬蟲的效率 64
5.1.2 實現分散式的方法 64
5.2 Celery 65
5.2.1 Celery入門 65
5.2.2 Celery分散式爬蟲 66
5.3 使用Scrapy-redis的分散式爬蟲 67
5.3.1 Scrapy-redis安裝與入門 67
5.3.2 創建Scrapy-redis爬蟲項目 68
第6章 抓包的使用與分析
6.1 利用抓包分析目標網站 72
6.1.1 如何抓包 72
6.1.2 網頁抓包分析 72
6.2 手機APP抓包 74
6.2.1 使用fiddler抓包 75
6.2.2 HTTPS證書安裝 75
6.2.3 booking手機端抓包 76
第7章 Websocket通信網站爬取
7.1 什麼是Websocket 79
7.1.1 Websocket-clinet 79
7.1.2 Websocket-clinet簡單入門 79
7.2 使用Websocket爬取財經網站 81
第8章 驗證碼破解
8.1 關於驗證碼 84
8.1.1 一般的驗證碼 84
8.1.2 極驗驗證 84
8.2 極驗滑動驗證破解 85
8.2.1 準備工具 85
8.2.2 分析滑動驗證碼 85
8.2.3 開始破解極限滑動驗證碼 87
8.3 圖片驗證碼破解 89
8.3.1 準備工具 89
8.3.2 文字圖像識別 89
8.3.3 識別驗證碼 90
第9章 多執行緒與多進程並發爬取
9.1 多執行緒 92
9.1.1 堵塞與非堵塞 92
9.1.2 繼承threading.Thread創建類 96
9.1.3 多執行緒的鎖 98
9.1.4 queue佇列 100
9.1.5 執行緒池 101
9.2 多執行緒爬蟲 103
9.2.1 爬蟲框架 103
9.2.2 編寫爬蟲 104
9.2.3 以多執行緒方式啟動 105
9.3 多進程 107
9.3.1 multiprocessing模組 107
9.3.2 通過Pool進程池創建進程 108
9.3.3 multiprocessing.Queue佇列 109
9.3.4 multiprocessing.Pipe管道 112
9.3.5 multiprocessing.Lock鎖 113
9.4 多進程爬蟲 114
9.4.1 多進程爬取音頻 114
9.4.2 多進程加多執行緒進行爬取 116
第10章 爬蟲接口最佳化
10.1 Gunicorn的安裝與使用 119
10.2 Gunicorn配置 121
10.2.1 配置參數 121
10.2.2 通過config檔案啟動 123
第11章 使用Docker部署爬蟲
11.1 Docker 125
11.1.1 Docker的安裝 125
11.1.2 Docker的鏡像 125
11.1.3 構建自己的Docker鏡像 127
11.1.4 容器使用 127
11.1.5 Dockerfile 129
11.2 爬虫部署 130
11.2.1 爬蟲接口 130
11.2.2 部署爬蟲接口 131
第二篇 實戰案例
第12章 實戰1:建立代理IP池
12.1 爬取免費代理IP 136
12.1.1 爬取代理IP 136
12.1.2 檢驗代理IP 138
12.2 建立代理IP池 138
12.2.1 檢驗代理IP 138
12.2.2 Redis訊息佇列 140
12.2.3 master爬蟲 142
第13章 實戰2:磁力連結搜尋器
13.1 爬取磁力搜尋平台 145
13.1.1 磁力平台 145
13.1.2 slave爬蟲 146
13.2 實現磁力搜尋器 148
13.2.1 展示與互動 148
13.2.2 數據查詢 150
第14章 實戰3:爬蟲管家
14.1 QQ機器人 152
14.1.1 qqbot 152
14.1.2 基本操作 152
14.1.3 實現自己的機器人 153
14.2 爬蟲監控機器人 153
第15章 實戰4:數據可視化
15.1 可視化包Pyecharts 156
15.1.1 Pyecharts的安裝 156
15.1.2 地圖展示數據 157
15.2 爬取最低價機票數據 158
15.2.1 破解旅遊網站價格日曆接口 159
15.2.2 爬取旅遊網站 160
15.2.3 將數據可視化 161
第16章 實戰5:爬取貼吧中的信箱
16.1 爬取網站 164
16.1.1 爬取高校名單 164
16.1.2 利用正則表達式匹配號碼 165
16.2 分析貼吧搜尋頁面並提取號碼 165
16.3 使用Scrapy開始編碼 167
16.3.1 創建貼吧Scrapy項目 167
16.3.2 新建爬蟲並編寫爬蟲邏輯 168
16.3.3 數據處理 170
第17章 實戰6:批量爬取企業信息
17.1 從第三方平台獲取企業名 172
17.2 如何爬取企業詳細信息 174
第18章 實戰7:爬取公眾號歷史文章
18.1 分析公眾號接口 177
18.1.1 開始抓包 177
18.1.2 分析接口 179
18.1.3 嘗試請求數據 179
18.2 爬取公眾號 180
18.2.1 爬取思路 180
18.2.2 請求接口獲取文章URL 180
18.2.3 解析文章網頁源碼 181
18.2.4 合併代碼 183
第19章 實戰8:高效爬取——異步爬蟲
19.1 異步編程 186
19.1.1 asyncio庫 186
19.1.2 aiohttp庫 187
19.1.3 訪問多個URL 188
19.2 爬取圖片 189
19.2.1 為函式命名 189
19.2.2 對網頁進行解析 190
19.2.3 異步爬取圖片 190
第20章 實戰9:爬取漫畫網站
20.1 爬取單部漫畫 193
20.1.1 單集漫畫的爬取 193
20.1.2 全集漫畫的爬取 195
20.2 爬取漫畫全站 196
第21章 實戰10:給kindle推送爬取的小說
21.1 用Python傳送郵件 199
21.1.1 純文本郵件的傳送 199
21.1.2 帶附屬檔案郵件的傳送 200
21.2 爬取小說 201
21.2.1 製作word文檔 201
21.2.2 爬取baka-tsuki.org 202
第22章 實戰11:爬取遊民星空壁紙
22.1 星空壁紙的爬取準備 205
22.2 爬取壁紙 206
22.2.1 獲取圖片和下一頁地址 206
22.2.2 爬取列表頁 208
22.2.3 爬取高清圖片資源 209
第23章 綜合實戰:建立一個小網站
23.1 Flask框架 210
23.1.1 寫一個簡單的hello word網頁 210
23.1.2 添加html模板 210
23.2 Bootstrap框架 212
23.2.1 使用Bootstrap框架 213
23.2.2 Bootstrap線上模板 213
23.2.3 添加壁紙板塊 215
第24章 綜合實戰:爬取電影網站
24.1 理清爬蟲的思路 218
24.2 分步編碼實現爬取 219
24.2.1 爬取詳情頁 219
24.2.2 爬取列表頁 220
24.2.3 爬取首頁 221
24.2.4 寫入資料庫 222
第25章 綜合實戰:建立電影小站
25.1 搭建項目 224
25.1.1 sqlite資料庫 224
25.1.2 創建項目 225
25.1.3 通過藍圖建立電影板塊 226
25.2 建立模板 229
25.2.1 flask-bootstrap 229
25.2.2 電影頁面 231
25.2.3 電影分類 233
25.2.4 電影詳情頁 237
25.2.5 電影搜尋頁 239
第26章 綜合實戰:磁力搜尋
26.1 磁力搜尋 241
26.1.1 如何高效爬取 241
26.1.2 建立Celery任務 244
26.2 Web部分 248
26.2.1 建立模型 248
26.2.2 視圖函式 248
26.2.3 關於產品 251
2.4.2 使用Selnium爬取網站 15
2.5 Selenium定位元素 16
2.5.1 通過屬性定位 17
2.5.2 通過xpath定位 17
2.6 Selenium反爬設定 18
2.6.1 設定請求頭 18
2.6.2 設定代理IP 19
第3章 常用爬蟲框架Scrapy
3.1 認識Scrapy 21
3.1.1 Scrapy爬取quotes簡單示例 21
3.1.2 安裝所需依賴包 23
3.1.3 使用虛擬環境 23
3.2 Scrapy shell的使用 24
3.2.1 運行shell 24
3.2.2 使用Scrapy shell爬取Scrapy.org 24
3.2.3 爬蟲調用shell 26
3.3 使用Scrapy爬取quotes 26
3.3.1 創建Scrapy項目並新建爬蟲 27
3.3.2 爬取和提取數據 27
3.3.3 通過腳本運行Scrapy爬蟲 29
3.3.4 在同一進程下運行多個爬蟲 29
3.3.5 簡易的分散式爬蟲思路 30
3.3.6 防止爬蟲被ban 31
3.4 setting基本配置 31
3.5 Pipeline模組 32
3.5.1 爬取文字板塊 32
3.5.2 編寫Pipeline模組 35
3.5.3 通過Pipeline將數據寫入MongoDB資料庫 36
3.5.4 ImagesPipeline處理圖片 37
3.5.5 FilePipeline下載檔案 40
3.6 Middleware中間件 41
3.6.1 Downloader Middleware 41
3.6.2 隨機請求頭中間件 42
3.6.3 更換代理IP中間件 45
3.6.4 通過Downloader Middleware使用Selenium 46
3.6.5 Spider Middleware 47
3.7 新功能拓展 48
3.7.1 信號signals 48
3.7.2 自定義拓展 51
第4章 數據存儲——資料庫的選擇
4.1 MySQL資料庫 53
4.1.1 MySQL的安裝 53
4.1.2 幾款可視化工具 54
4.1.3 資料庫連線 55
4.1.4 資料庫插入操作 55
4.1.5 資料庫查詢 56
4.1.6 資料庫更新操作 56
4.1.7 爬取寫入資料庫 57
4.2 MongoDB資料庫 58
4.2.1 MongoDB安裝 58
4.2.2 連線資料庫 59
4.2.3 查詢資料庫 59
4.2.4 插入和更新資料庫 59
4.2.5 爬取數據並插入到MongoDB資料庫中 60
4.3 Redis資料庫 60
4.3.1 Redis安裝 60
4.3.2 連線Redis資料庫 61
4.3.3 Python操作Redis資料庫 61
4.3.4 爬取並寫入Redis做快取 62
第5章 效率為王——分散式爬蟲
5.1 什麼是分散式爬蟲 64
5.1.1 分散式爬蟲的效率 64
5.1.2 實現分散式的方法 64
5.2 Celery 65
5.2.1 Celery入門 65
5.2.2 Celery分散式爬蟲 66
5.3 使用Scrapy-redis的分散式爬蟲 67
5.3.1 Scrapy-redis安裝與入門 67
5.3.2 創建Scrapy-redis爬蟲項目 68
第6章 抓包的使用與分析
6.1 利用抓包分析目標網站 72
6.1.1 如何抓包 72
6.1.2 網頁抓包分析 72
6.2 手機APP抓包 74
6.2.1 使用fiddler抓包 75
6.2.2 HTTPS證書安裝 75
6.2.3 booking手機端抓包 76
第7章 Websocket通信網站爬取
7.1 什麼是Websocket 79
7.1.1 Websocket-clinet 79
7.1.2 Websocket-clinet簡單入門 79
7.2 使用Websocket爬取財經網站 81
第8章 驗證碼破解
8.1 關於驗證碼 84
8.1.1 一般的驗證碼 84
8.1.2 極驗驗證 84
8.2 極驗滑動驗證破解 85
8.2.1 準備工具 85
8.2.2 分析滑動驗證碼 85
8.2.3 開始破解極限滑動驗證碼 87
8.3 圖片驗證碼破解 89
8.3.1 準備工具 89
8.3.2 文字圖像識別 89
8.3.3 識別驗證碼 90
第9章 多執行緒與多進程並發爬取
9.1 多執行緒 92
9.1.1 堵塞與非堵塞 92
9.1.2 繼承threading.Thread創建類 96
9.1.3 多執行緒的鎖 98
9.1.4 queue佇列 100
9.1.5 執行緒池 101
9.2 多執行緒爬蟲 103
9.2.1 爬蟲框架 103
9.2.2 編寫爬蟲 104
9.2.3 以多執行緒方式啟動 105
9.3 多進程 107
9.3.1 multiprocessing模組 107
9.3.2 通過Pool進程池創建進程 108
9.3.3 multiprocessing.Queue佇列 109
9.3.4 multiprocessing.Pipe管道 112
9.3.5 multiprocessing.Lock鎖 113
9.4 多進程爬蟲 114
9.4.1 多進程爬取音頻 114
9.4.2 多進程加多執行緒進行爬取 116
第10章 爬蟲接口最佳化
10.1 Gunicorn的安裝與使用 119
10.2 Gunicorn配置 121
18.2.3 解析文章網頁源碼 181
18.2.4 合併代碼 183
第19章 實戰8:高效爬取——異步爬蟲
19.1 異步編程 186
19.1.1 asyncio庫 186
19.1.2 aiohttp庫 187
19.1.3 訪問多個URL 188
19.2 爬取圖片 189
19.2.1 為函式命名 189
19.2.2 對網頁進行解析 190
19.2.3 異步爬取圖片 190
第20章 實戰9:爬取漫畫網站
20.1 爬取單部漫畫 193
20.1.1 單集漫畫的爬取 193
20.1.2 全集漫畫的爬取 195
20.2 爬取漫畫全站 196
第21章 實戰10:給kindle推送爬取的小說
21.1 用Python傳送郵件 199
21.1.1 純文本郵件的傳送 199
21.1.2 帶附屬檔案郵件的傳送 200
21.2 爬取小說 201
21.2.1 製作word文檔 201
21.2.2 爬取baka-tsuki.org 202
第22章 實戰11:爬取遊民星空壁紙
22.1 星空壁紙的爬取準備 205
22.2 爬取壁紙 206
22.2.1 獲取圖片和下一頁地址 206
22.2.2 爬取列表頁 208
22.2.3 爬取高清圖片資源 209
第23章 綜合實戰:建立一個小網站
23.1 Flask框架 210
23.1.1 寫一個簡單的hello word網頁 210
23.1.2 添加html模板 210
23.2 Bootstrap框架 212
23.2.1 使用Bootstrap框架 213
23.2.2 Bootstrap線上模板 213
23.2.3 添加壁紙板塊 215
第24章 綜合實戰:爬取電影網站
24.1 理清爬蟲的思路 218
24.2 分步編碼實現爬取 219
24.2.1 爬取詳情頁 219
24.2.2 爬取列表頁 220
24.2.3 爬取首頁 221
24.2.4 寫入資料庫 222
第25章 綜合實戰:建立電影小站
25.1 搭建項目 224
25.1.1 sqlite資料庫 224
25.1.2 創建項目 225
25.1.3 通過藍圖建立電影板塊 226
25.2 建立模板 229
25.2.1 flask-bootstrap 229
25.2.2 電影頁面 231
25.2.3 電影分類 233
25.2.4 電影詳情頁 237
25.2.5 電影搜尋頁 239
第26章 綜合實戰:磁力搜尋
26.1 磁力搜尋 241
26.1.1 如何高效爬取 241
26.1.2 建立Celery任務 244