內容提要
《網路爬蟲全解析——技術、原理與實踐》介紹了如何開發網路爬蟲。內容主要包括開發網路爬蟲所需要的Java語法基礎和網路爬蟲的工作原理,如何使用開源組件HttpClient和爬蟲框架Crawler4j抓取網頁信息,以及針對抓取到的文本進行有效信息的提取。為了擴展抓取能力,《網路爬蟲全解析——技術、原理與實踐》介紹了實現分散式網路爬蟲的關鍵技術。
另外,《網路爬蟲全解析——技術、原理與實踐》介紹了從圖像和語音等多媒體格式檔案中提取文本信息,以及如何使用大數據技術存儲抓取到的信息。最後,以實戰為例,介紹了如何抓取微信和微博,以及在電商、醫藥、金融等領域的案例套用。其中,電商領域的套用介紹了使用網路爬蟲抓取商品信息入庫到網上商店的資料庫表。醫藥領域的案例介紹了抓取PubMed醫藥論文庫。金融領域的案例介紹了抓取股票信息,以及從年報PDF文檔中提取表格等。
《網路爬蟲全解析——技術、原理與實踐》適用於對開發信息採集軟體感興趣的自學者。也可以供有Java或程式設計基礎的開發人員參考。
目錄
第1章 技術基礎 1
1.1 第一個程式 1
1.2 準備開發環境 2
1.2.1 JDK 2
1.2.2 Eclipse 3
1.3 類和對象 4
1.4 常量 5
1.5 命名規範 6
1.6 基本語法 6
1.7 條件判斷 7
1.8 循環 8
1.9 數組 9
1.10 位運算 11
1.11 枚舉類型 13
1.12 比較器 14
1.13 方法 14
1.14 集合類 15
1.14.1 動態數組 15
1.14.2 散列表 15
1.15 檔案 19
1.15.1 文本檔案 19
1.16 多執行緒 27
1.16.1 基本的多執行緒 28
1.16.2 執行緒池 30
1.17 折半查找 31
1.18 處理圖片 34
1.19 本章小結 35
第2章 網路爬蟲入門 36
2.1 獲取信息 36
2.1.1 提取連結 37
2.1.2 採集新聞 37
2.2 各種網路爬蟲 38
2.2.1 信息採集器 40
2.2.2 廣度優先遍歷 41
2.2.3 分散式爬蟲 42
2.3 爬蟲相關協定 43
2.3.1 網站地圖 44
2.4 爬蟲架構 48
2.4.1 基本架構 48
2.4.2 分散式爬蟲架構 51
2.4.3 垂直爬蟲架構 54
2.5 自己寫網路爬蟲 55
2.6 URL地址查新 57
2.6.3 實現布隆過濾器 61
2.7 部署爬蟲 63
2.7.1 部署到Windows 64
2.7.2 部署到Linux 64
2.8 本章小結 65
第3章 定向採集 69
3.1 下載網頁的基本方法 69
3.1.1 網卡 70
3.1.2 下載網頁 70
3.2 HTTP基礎 75
3.2.1 協定 75
3.2.2 URI 77
3.2.3 DNS 84
3.3 使用HttpClient下載網頁 84
3.3.1 HttpCore 94
3.3.2 狀態碼 98
3.3.3 創建 99
3.3.4 模擬瀏覽器 99
3.3.5 重試 100
3.3.6 抓取壓縮的網頁 102
3.3.7 HttpContext 104
3.3.8 下載中文網站 105
3.3.9 抓取需要登錄的網頁 106
3.3.10 代理 111
3.3.11 DNS快取 112
3.3.12 並行下載 113
3.4 下載網路資源 115
3.4.1 重定向 115
3.4.2 解決套接字連線限制 118
3.4.3 下載圖片 119
3.4.4 抓取視頻 122
3.4.5 抓取FTP 122
3.4.6 網頁更新 122
3.4.7 抓取限制應對方法 126
3.4.8 URL地址提取 131
3.4.9 解析URL地址 134
3.4.10 歸一化 135
3.4.11 增量採集 135
3.4.12 iframe 136
3.4.13 抓取JavaScript動態頁面 137
3.4.14 抓取即時信息 141
3.4.15 抓取暗網 141
3.5 PhantomJS 144
3.6 Selenium 145
3.7 信息過濾 146
3.7.1 匹配算法 147
3.7.2 分散式過濾 153
3.8 採集新聞 153
3.8.1 網頁過濾器 154
3.8.2 列表頁 159
3.8.3 用機器學習的方法抓取新聞 160
3.8.4 自動查找目錄頁 161
3.8.5 詳細頁 162
3.8.6 增量採集 164
3.8.7 處理圖片 164
3.9 遍歷信息 164
3.10 並行抓取 165
3.10.1 多執行緒爬蟲 165
3.10.2 垂直搜尋的多執行緒爬蟲 168
3.10.3 異步IO 172
3.11 分散式爬蟲 176
3.11.1 JGroups 176
3.11.2 監控 179
3.12 增量抓取 180
3.13 管理界面 180
3.14 本章小結 181
第4章 數據存儲 182
4.1 存儲提取內容 182
4.1.1 SQLite 183
4.1.3 MySQL 186
4.1.4 寫入維基 187
4.2 HBase 187
4.3 Web圖 189
4.4 本章小結 193
第5章 信息提取 194
5.1 從文本提取信息 194
5.2.1 字元集編碼 195
5.2.2 識別網頁的編碼 198
5.2.3 網頁編碼轉換為字元串編碼 201
5.2.4 使用正則表達式提取數據 202
5.2.5 結構化信息提取 206
5.2.6 表格 209
5.2.7 網頁的DOM結構 210
5.2.8 使用Jsoup提取信息 211
5.2.9 使用XPath提取信息 217
5.2.10 HTMLUnit提取數據 219
5.2.11 網頁結構相似度計算 220
5.2.12 提取標題 222
5.2.13 提取日期 224
5.2.14 提取模板 225
5.2.15 提取RDF信息 227
5.2.16 網頁解析器原理 227
5.3 RSS 229
5.3.1 Jsoup解析RSS 230
5.3.2 ROME 231
5.3.3 抓取流程 231
5.4 網頁去噪 233
5.4.1 NekoHTML 234
5.4.2 Jsoup 238
5.4.3 提取正文 240
5.5 從非HTML檔案中提取文本 241
5.5.2 Word檔案 245
5.5.4 Excel檔案 253
5.5.5 PowerPoint檔案 254
5.6 提取標題 254
5.6.1 提取標題的一般方法 255
5.6.2 從PDF檔案中提取標題 259
5.6.3 從Word檔案中提取標題 261
5.6.4 從Rtf檔案中提取標題 261
5.6.5 從Excel檔案中提取標題 267
5.6.6 從PowerPoint檔案中提取標題 270
5.7 圖像的OCR識別 270
5.7.1 讀入圖像 271
5.7.2 準備訓練集 272
5.7.4 切分圖像 279
5.7.5 SVM分類 283
5.7.6 識別漢字 287
5.7.7 訓練OCR 289
5.7.8 檢測行 290
5.7.9 識別驗證碼 291
5.7.10 JavaOCR 292
5.8 提取地域信息 292
5.8.1 IP位址 293
5.8.2 手機 315
5.9 提取新聞 316
5.10 流媒體內容提取 317
5.10.1 音頻流內容提取 317
5.10.2 視頻流內容提取 321
5.11 內容糾錯 322
5.11.1 模糊匹配問題 325
5.11.2 英文拼寫檢查 331
5.11.3 中文拼寫檢查 333
5.12 術語 336
5.13 本章小結 336
第6章 Crawler4j 338
6.1 使用Crawler4j 338
6.1.2 日誌 342
6.2 crawler4j原理 342
6.2.1 代碼分析 343
6.2.2 使用Berkeley DB 344
6.2.3 縮短URL地址 347
6.2.4 網頁編碼 349
6.2.5 並發 349
6.3 本章小結 352
第7章 網頁排重 353
7.1 語義指紋 354
7.2 SimHash 357
7.3 分散式文檔排重 367
7.4 本章小結 369
第8章 網頁分類 370
8.1 關鍵字加權法 371
8.2 機器學習的分類方法 378
8.2.1 特徵提取 380
8.2.4 多級分類 401
8.2.5 網頁分類 403
8.3 本章小結 403
第9章 案例分析 404
9.1 金融爬蟲 404
9.1.1 中國能源政策數據 404
9.1.2 世界原油現貨交易和期貨交易數據 405
9.1.3 股票數據 405
9.1.4 從PDF檔案中提取表格 408
9.2 商品搜尋 408
9.2.1 遍歷商品 410
9.2.2 使用HttpClient 415
9.2.3 提取價格 416
9.2.4 水印 419
9.2.5 數據導入ECShop 420
9.2.6 採集淘寶 423
9.3 自動化行業採集 424
9.4 社會化信息採集 424
9.5 微博爬蟲 424
9.6 微信爬蟲 426
9.7 海關數據 426
9.8 醫藥數據 427
9.9 本章小結 429
後記 430