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

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

作者: 李寧
出版社: 清華大學
出版在: 2020-01-01
ISBN-13: 9787302535683
ISBN-10: 730253568X





內容描述


本書從實戰角度系統講解 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等多種技術實現一個可視化爬蟲。 本書可以作為廣大電腦軟件技術開發者、因特網技術研究人員學習“爬蟲技術”的參考用書。也可以作為高等院校電腦科學與技術、軟件工程、人工智能等專業的教學參考用書。


目錄大綱


第 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


作者介紹


李寧
歐瑞科技創始人&CEO,寧哥教育創始人,東北大學計算機專業碩士。曾任國內某大型軟件公司項目經理、寧哥教育教學總監、51CTO學院金牌講師、CSDN特級講師。從事軟件研究和開發超過15年,一直從事Python、人工智能、區塊鏈、JavaScript、Node.js、Java以及跨平台技術的研究和技術指導工作,對國內外相關領域的技術、理論和實踐有很深的理解和研究。




相關書籍

數據流機器學習:MOA (Machine Learning for Data Streams)

作者 [法] 阿爾伯特·比費特(Albert Bifet) [西班牙] 理乍得·戈華達(Richard Gavaldà) [新西蘭] 傑弗里·福爾摩斯(Geoffrey Holmes) [新西蘭] 伯恩哈德·普法林格(Bernhard Pfahringer)

2020-01-01

Fundamentals of Computer Vision (美國原版)

作者 Wesley E. Snyder Hairong Qi

2020-01-01

數據、謊言與真相:Google資料分析師用大數據揭露人們的真面目 (Everybody Lies: Big Data, New Data, and What the Internet Can Tell Us About Who We Really Are)

作者 賽斯 史蒂芬斯—大衛德維茲(Seth Stephens-Davidowitz) 陳琇玲 譯

2020-01-01