Python爬蟲技術——深入理解原理、技術與開發

李寧

  • 出版商: 清華大學
  • 出版日期: 2020-01-01
  • 定價: $534
  • 售價: 8.5$454
  • 語言: 簡體中文
  • ISBN: 730253568X
  • ISBN-13: 9787302535683
  • 相關分類: 網路爬蟲 Web-crawler

下單後立即進貨 (約4週~6週)

商品描述

本書從實戰角度系統講解 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