Python 爬蟲技術 — 深入理解原理、技術與開發
李寧
- 出版商: 清華大學
- 出版日期: 2020-01-01
- 定價: $534
- 售價: 8.5 折 $454
- 語言: 簡體中文
- ISBN: 730253568X
- ISBN-13: 9787302535683
-
相關分類:
Web-crawler 網路爬蟲
立即出貨
買這商品的人也買了...
-
$403Python 網絡爬蟲實戰, 2/e
-
$580$458 -
$653Python 從菜鳥到高手
-
$352Python 網絡爬蟲從入門到實踐, 2/e
-
$580$452 -
$780$616 -
$650$514 -
$380$342 -
$594$564 -
$454Python 3反爬蟲原理與繞過實戰
-
$230數據準備和特徵工程 — 數據工程師必知必會技能
-
$760$646 -
$890$703 -
$137$131 -
$254Python 爬蟲開發實戰教程
-
$662機器視覺之 TensorFlow 2 入門原理與應用實戰
-
$407React 工程師修煉指南
-
$1,000$790 -
$509CTF 安全競賽入門
-
$500$395 -
$714$678 -
$690$545 -
$474$450 -
$505API 安全技術與實戰
-
$556Python 網絡爬蟲與數據可視化應用實戰
相關主題
商品描述
本書從實戰角度系統講解 Python爬蟲的核心知識點,並通過大量的真實項目讓讀者熟練掌握 Python爬蟲技術。本書用 20多個實戰案例,完美演繹了使用各種技術編寫 Python爬蟲的方式,讀者可以任意組合這些技術,完成非常復雜的爬蟲應用。 全書共 20章,分為 5篇。第 1篇基礎知識(第 1、2章),主要包括 Python運行環境的搭建、 HTTP基礎、網頁基礎( HTML、CSS、JavaScript等)、爬蟲的基本原理、 Session與 Cookie。第 2篇網絡庫(第 3~ 6章),主要包括網絡庫 urllib、urllib3、requests和 Twisted的核心使用方法,如發送 HTTP請求、處理超時、設置 HTTP請求頭、搭建和使用代理、解析鏈接、 Robots協議等。第 3篇解析庫(第 7~ 10章),主要包括 3個常用解析庫( lxml、Beautiful Soup和 pyquery)的使用方法,同時介紹多種用於分析 HTML代碼的技術,如正則表達式、 XPath、CSS選擇器、方法選擇器等。第 4篇數據存儲(第 11、12章),主要包括 Python中數據存儲的解決方案,如文件存儲和數據庫存儲,其中數據庫存儲包括多種數據庫,如本地數據庫 SQLite、網絡數據庫 MySQL以及文檔數據庫 MongoDB。第 5篇爬蟲高級應用(第 13~ 20章),主要包括 Python爬蟲的一些高級技術,如抓取異步數據、 Selenium、Splash、抓取移動 App數據、 Appium、多線程爬蟲、爬蟲框架 Scrapy,最後給出一個綜合的實戰案例,綜合了 Python爬蟲、數據存儲、 PyQt5、多線程、數據可視化、Web等多種技術實現一個可視化爬蟲。 本書可以作為廣大電腦軟件技術開發者、因特網技術研究人員學習“爬蟲技術”的參考用書。也可以作為高等院校電腦科學與技術、軟件工程、人工智能等專業的教學參考用書。
作者簡介
李寧
歐瑞科技創始人&CEO,寧哥教育創始人,東北大學計算機專業碩士。曾任國內某大型軟件公司項目經理、寧哥教育教學總監、51CTO學院金牌講師、CSDN特級講師。從事軟件研究和開發超過15年,一直從事Python、人工智能、區塊鏈、JavaScript、Node.js、Java以及跨平台技術的研究和技術指導工作,對國內外相關領域的技術、理論和實踐有很深的理解和研究。
目錄大綱
第 1篇基礎知識
第 1章開發環境配置 . 2
1.1 安裝官方的 Python運行環境 .2
1.2 配置 PATH環境變量.5
1.3 安裝 Anaconda Python開發環境 .6
1.4 安裝 PyCharm .7
1.5 配置 PyCharm .8
1.6 小結 . 10
第 2章爬蟲基礎.11
2.1 HTTP基礎 11
2.1.1 URI和 URL 11
2.1.2 超文本 12
2.1.3 HTTP與 HTTPS . 12
2.1.4 HTTP的請求過程 . 15
2.1.5 請求 17
2.1.6 響應 20
2.2 網頁基礎 23
2.2.1 HTML . 23
2.2.2 CSS 24
2.2.3 CSS選擇器. 25
2.2.4 JavaScript . 27
2.3 爬蟲的基本原理 27
2.3.1 爬蟲的分類 . 27
2.3.2 爬蟲抓取數據的方式和手段 . 28
2.4 Session與 Cookie . 28
2.4.1 靜態頁面和動態頁面 . 29
2.4.2 無狀態 HTTP與 Cookie 30
2.4.3 利用 Session和 Cookie保持狀態 . 30
2.4.4 查看網站的 Cookie 31
2.4.5 HTTP狀態何時會失效 32
CONTENTS 目 錄
2.5 實戰案例:抓取所有的網絡資源 . 33
2.6 實戰案例:抓取博客文章列表 . 37
2.7 小結 . 40
第 2篇網絡庫
第 3章網絡庫 urllib . 42
3.1 urllib簡介 42
3.2 發送請求與獲得響應 . 43
3.2.1 用 urlopen函數發送 HTTP GET請求 43
3.2.2 用 urlopen函數發送 HTTP POST請求 44
3.2.3 請求超時 . 45
3.2.4 設置 HTTP請求頭 46
3.2.5 設置中文 HTTP請求頭 . 48
3.2.6 請求基礎驗證頁面 . 50
3.2.7 搭建代理與使用代理 . 54
3.2.8 讀取和設置 Cookie 56
3.3 異常處理 60
3.3.1 URLError 60
3.3.2 HTTPError 61
3.4 解析鏈接 62
3.4.1 拆分與合併 URL(urlparse與 urlunparse) . 62
3.4.2 另一種拆分與合併 URL的方式(urlsplit與 urlunsplit) 63
3.4.3 連接 URL(urljoin) . 65
3.4.4 URL編碼(urlencode). 65
3.4.5 編碼與解碼(quote與 unquote). 66
3.4.6 參數轉換(parse_qs與 parse_qsl) 66
3.5 Robots協議 67
3.5.1 Robots協議簡介 . 67
3.5.2 分析 Robots協議 68
3.6 小結 . 69
第 4章網絡庫 urllib3 . 70
4.1 urllib3簡介 70
4.2 urllib3模塊 70
4.3 發送 HTTP GET請求 71
4.4 發送 HTTP POST請求 72
4.5 HTTP請求頭 74
4.6 HTTP響應頭 76
4.7 上傳文件 76
4.8 超時 . 78
4.9 小結 . 79
第 5章網絡庫 requests . 80
5.1 基本用法 80
5.1.1 requests的 HelloWorld 81
5.1.2 GET請求 81
5.1.3 添加 HTTP請求頭 82
5.1.4 抓取二進制數據 83
5.1.5 POST請求 84
5.1.6 響應數據 . 85
5.2 高級用法 87
5.2.1 上傳文件 . 88
5.2.2 處理 Cookie 89
5.2.3 使用同一個會話(Session) 90
5.2.4 SSL證書驗證 91
5.2.5 使用代理 . 94
5.2.6 超時 95
5.2.7 身份驗證 . 97
5.2.8 將請求打包 . 97
5.3 小結 . 98
第 6章 Twisted網絡框架 99
6.1 異步編程模型 . 99
6.2 Reactor(反應堆)模式 . 101
6.3 HelloWorld,Twisted框架 101
6.4 用 Twisted實現時間戳客戶端 103
6.5 用 Twisted實現時間戳服務端 104
6.6 小結 . 105
第 3篇解析庫
第 7章正則表達式 . 108
7.1 使用正則表達式 108
7.1.1 使用 match方法匹配字符串 108
7.1.2 使用 search方法在一個字符串中查找模式 . 109
7.1.3 匹配多個字符串 110
7.1.4 匹配任何單個字符 . 111
7.1.5 使用字符集 . 112
7.1.6 重複、可选和特殊字符 114
7.1.7 分組 117
7.1.8 匹配字符串的起始和結尾以及單詞邊界 . 118
7.1.9 使用 findall和 finditer查找每一次出現的位置 . 120
7.1.10 用 sub和 subn搜索與替換. 121
7.1.11 使用 split分隔字符串 122
7.2 一些常用的正則表達式 . 123
7.3 項目實戰:抓取小說目錄和全文 . 124
7.4 項目實戰:抓取貓眼電影 Top100榜單 128
7.5 項目實戰:抓取糗事百科網的段子 133
7.6 小結 . 136
第 8章 lxml與 XPath . 137
8.1 lxml基礎 137
8.1.1 安裝 lxml 137
8.1.2 操作 XML . 138
8.1.3 操作 HTML . 140
8.2 XPath . 141
8.2.1 XPath概述 141
8.2.2 使用 XPath 141
8.2.3 選取所有節點 143
8.2.4 選取子節點 . 145
8.2.5 選取父節點 . 146
8.2.6 屬性匹配與獲取 146
8.2.7 多屬性匹配 . 147
8.2.8 按序選擇節點 148
8.2.9 節點軸選擇 . 149
8.2.10 在 Chrome中自動獲得 XPath代碼 151
8.2.11 使用 Chrome驗證 XPath . 153
8.3 項目實戰:抓取豆瓣 Top250圖書榜單 154
8.4 項目實戰:抓取起點中文網的小說信息 . 158
8.5 小結 . 161
第 9章 Beautiful Soup庫. 162
9.1 Beautiful Soup簡介 162
9.2 Beautiful Soup基礎 162
9.2.1 安裝 Beautiful Soup 163
9.2.2 選擇解析器 . 164
9.2.3 編寫第一個 Beautiful Soup程序 164
9.3 節點選擇器 . 165
9.3.1 選擇節點 . 165
9.3.2 嵌套選擇節點 167
9.3.3 選擇子節點 . 168
9.3.4 選擇父節點 . 171
9.3.5 選擇兄弟節點 172
9.4 方法選擇器 . 174
9.4.1 find_all方法 . 174
9.4.2 find方法 . 177
9.5 CSS選擇器 . 178
9.5.1 基本用法 . 179
9.5.2 嵌套選擇節點 180
9.5.3 獲取屬性值與文本 . 181
9.5.4 通過瀏覽器獲取 CSS選擇器代碼. 182
9.6 實戰案例:抓取租房信息 184
9.7 實戰案例:抓取酷狗網絡紅歌榜 . 188
9.8 小結 . 191
第 10章 pyquery庫 . 192
10.1 pyquery簡介 . 192
10.2 pyquery基礎 . 192
10.2.1 安裝 pyquery . 193
10.2.2 pyquery的基本用法 193
10.3 CSS選擇器 . 194
10.4 查找節點. 196
10.4.1 查找子節點 . 196
10.4.2 查找父節點 . 197
10.4.3 查找兄弟節點 198
10.4.4 獲取節點信息 199
10.5 修改節點. 203
10.5.1 添加和移除節點的樣式(addClass和 removeClass). 204
10.5.2 修改節點屬性和文本內容(attr、removeAttr、text和 html) 205
10.5.3 刪除節點(remove) . 207
10.6 偽類選擇器 . 208
10.7 項目實戰:抓取噹噹圖書排行榜 210
10.8 項目實戰:抓取京東商城手機銷售排行榜 213
10.9 小結 219
第 4篇數據存儲
第 11章文件存儲 222
11.1 打開文件 . 222
11.2 操作文件的基本方法 . 224
11.2.1 讀文件和寫文件 224
11.2.2 讀行和寫行 . 226
11.3 使用 FileInput對象讀取文件 . 227
11.4 處理 XML格式的數據 . 228
11.4.1 讀取與搜索 XML文件 . 228
11.4.2 字典轉換為 XML字符串 . 229
11.4.3 XML字符串轉換為字典 231
11.5 處理 JSON格式的數據 232
11.5.1 JSON字符串與字典互相轉換 233
11.5.2 將 JSON字符串轉換為類實例 234
11.5.3 將類實例轉換為 JSON字符串 236
11.5.4 類實例列表與 JSON字符串互相轉換 236
11.6 將 JSON字符串轉換為 XML字符串 237
11.7 CSV文件存儲 . 238
11.7.1 寫入 CSV文件 238
11.7.2 讀取 CSV文件 241
11.8 小結 241
第 12章數據庫存儲. 242
12.1 SQLite數據庫 . 242
12.1.1 管理 SQLite數據庫 . 243
12.1.2 用 Python操作 SQLite數據庫 . 245
12.2 MySQL數據庫 . 247
12.2.1 安裝 MySQL . 247
12.2.2 在 Python中使用 MySQL 250
12.3 非關係型數據庫 253
12.3.1 NoSQL簡介 253
12.3.2 MongoDB數據庫 . 253
12.3.3 pymongo模塊 . 255
12.4 項目實戰:抓取豆瓣音樂排行榜 256
12.5 項目實戰:抓取豆瓣電影排行榜 260
12.6 小結 264
第 5篇爬蟲高級應用
第 13章抓取異步數據 . 266
13.1 異步加載與 AJAX . 266
13.2 基本原理. 267
13.3 逆向工程. 270
13.4 提取結果. 274
13.5 項目實戰:支持搜索功能的圖片爬蟲 . 274
13.6 項目實戰:抓取京東圖書評價 . 279
13.7 小結 284
第 14章可見即可爬:Selenium 285
14.1 安裝 Selenium . 286
14.2 安裝 WebDriver 286
14.2.1 安裝 ChromeDriver 287
14.2.2 裝 Edge WebDriver 288
14.2.3 安裝其他瀏覽器的 WebDriver 289
14.3 Selenium的基本使用方法 . 289
14.4 查找節點. 293
14.4.1 查找單個節點 293
14.4.2 查找多個節點 295
14.5 節點交互. 297
14.6 動作鏈 298
14.7 執行 JavaScript代碼 . 301
14.8 獲取節點信息 302
14.9 管理 Cookies . 303
14.10 改變節點的屬性值 . 304
14.11 項目實戰:抓取 QQ空間說說的內容 . 306
14.12 小結 308
第 15章基於 Splash的爬蟲 . 309
15.1 Splash基礎 . 309
15.1.1 Splash功能簡介 309
15.1.2 安裝 Docker 310
15.1.3 安裝 Splash . 310
15.2 Splash Lua腳本 312
15.2.1 第一個 Lua腳本 312
15.2.2 異步處理 . 313
15.2.3 Splash對象屬性 314
15.2.4 go方法 . 318
15.2.5 wait方法 . 319
15.2.6 jsfunc方法 320
15.2.7 evaljs方法 320
15.2.8 runjs方法 . 320
15.2.9 autoload方法 321
15.2.10 call_later方法 . 322
15.2.11 http_get方法 . 323
15.2.12 http_post方法 . 324
15.2.13 set_content方法 325
15.2.14 html方法 325
15.2.15 png方法 326
15.2.16 jpeg方法 . 326
15.2.17 har方法 326
15.2.18 其他方法 . 327
15.3 使用 CSS選擇器 . 331
15.3.1 select方法 331
15.3.2 select_all方法 . 332
15.4 模擬鼠標和鍵盤的動作 333
15.5 Splash HTTP API 334
15.6 項目實戰:使用 Splash Lua抓取京東搜索結果 . 338
15.7 小結 340
第 16章抓取移動 App的數據 . 341
16.1 使用 Charles . 341
16.1.1 抓取 HTTP數據包 . 342
16.1.2 安裝 PC端證書 . 344
16.1.3 在手機端安裝證書 . 345
16.1.4 監聽 HTTPS數據包 . 346
16.2 使用 mitmproxy 348
16.2.1 安裝 mitmproxy. 348
16.2.2 在 PC端安裝 mitmproxy證書 349
16.2.3 在移動端安裝 mitmproxy證書. 352
16.2.4 mitmproxy有哪些功能 353
16.2.5 設置手機的代理 353
16.2.6 用 mitmproxy監聽 App的請求與響應數據 . 354
16.2.7 使用 mitmproxy編輯請求信息. 356
16.2.8 mitmdump與 Python對接 . 357
16.2.9 使用 mitmweb監聽請求與響應 361
16.3 項目實戰:實時抓取“得到” App在線課程 363
16.4 小結 367
第 17章使用 Appium在移動端抓取數據 . 368
17.1 安裝 Appium . 368
17.1.1 安裝 Appium桌面端 368
17.1.2 配置 Android開發環境 370
17.1.3 配置 iOS開發環境 371
17.2 Appium的基本使用方法 . 372
17.2.1 啟動 Appium服務 . 372
17.2.2 查找 Android App的 Package和入口 Activity. 374
17.2.3 控制 App . 376
17.3 使用 Python控製手機 App 379
17.4 AppiumPythonClient API. 380
17.4.1 初始化(Remote類) 380
17.4.2 查找元素 . 381
17.4.3 單擊元素 . 381
17.4.4 屏幕拖動 . 382
17.4.5 屏幕滑動 . 382
17.4.6 拖曳操作 . 383
17.4.7 文本輸入 . 383
17.4.8 動作鏈 383
17.5 項目實戰:利用 Appium抓取微信朋友圈信息 384
17.6 小結 388
第 18章多線程和多進程爬蟲 389
18.1 線程與進程 . 389
18.1.1 進程 389
18.1.2 線程 390
18.2 Python與線程 . 390
18.2.1 使用單線程執行程序 . 390
18.2.2 使用多線程執行程序 . 391
18.2.3 為線程函數傳遞參數 . 393
18.2.4 線程和鎖 . 394
18.3 高級線程模塊(threading) . 395
18.3.1 Thread類與線程函數 . 395
18.3.2 Thread類與線程對象 . 396
18.3.3 從 Thread類繼承 . 398
18.4 線程同步. 399
18.4.1 線程鎖 400
18.4.2 信號量 402
18.5 生產者—消費者問題與 queue模塊 405
18.6 多進程 407
18.7 項目實戰:抓取豆瓣音樂 Top250排行榜(多線程版) 408
18.8 項目實戰:抓取豆瓣音樂 Top250排行榜(多進程版) 411
18.9 小結 412
第 19章網絡爬蟲框架:Scrapy 413
19.1 Scrapy基礎知識 . 413
19.1.1 Scrapy簡介 . 413
19.1.2 Scrapy安裝 . 414
19.1.3 Scrapy Shell抓取 Web資源 . 415
19.2 用 Scrapy編寫網絡爬蟲 417
19.2.1 創建和使用 Scrapy工程 417
19.2.2 在 PyCharm中使用 Scrapy 419
19.2.3 在 PyCharm中使用擴展工具運行 Scrapy程序 . 421
19.2.4 使用 Scrapy抓取數據,並通過 XPath指定解析規則 423
19.2.5 將抓取到的數據保存為多種格式的文件 424
19.2.6 使用 ItemLoader保存單條抓取的數據 426
19.2.7 使用 ItemLoader保存多條抓取的數據 428
19.2.8 抓取多個 URL . 430
19.3 Scrapy的高級應用 431
19.3.1 處理登錄頁面 431
19.3.2 處理帶隱藏文本框的登錄頁面 . 434
19.3.3 通過 API抓取天氣預報數據 436
19.3.4 從 CSV格式轉換到 JSON格式 443
19.3.5 下載器中間件 447
19.3.6 爬蟲中間件 . 452
19.3.7 Item管道 455
19.3.8 通用爬蟲 . 465
19.4 小結 474
第 20章綜合爬蟲項目:可視化爬蟲 475
20.1 項目簡介. 475
20.2 主界面設計和實現 . 477
20.3 獲取商品頁數和每頁商品數 . 478
20.4 並發抓取商品列表 . 479
20.5 數據庫操作類 481
20.6 情感分析. 484
20.7 抓取和分析商品評論數據 485
20.8 可視化評論數據 486
20.9 小結 488