網絡爬蟲全解析 技術 原理與實踐pdf

2018年10月11日22:47:41 發表評論 86
摘要

適讀人群 :本書適用于對開發信息采集軟件感興趣的自學者。也可以供有Java或程序設計基礎的開發人員參考。
★相比用Python寫網絡爬蟲,Java更有后發優勢
★運行在服務器端的網絡爬蟲,更應該用Java開發
★本書結合作者多年網絡爬蟲開發經驗
★全面系統講解了網絡爬蟲相關技術并以Java實現
★通俗易懂、代碼清晰、案例豐富實用
★一本書全面掌握網絡爬蟲開發

網絡爬蟲全解析 技術 原理與實踐 內容簡介

本書介紹了如何開發網絡爬蟲。內容主要包括開發網絡爬蟲所需要的Java語法基礎和網絡爬蟲的工作原理,如何使用開源組件HttpClient和爬蟲框架Crawler4j抓取網頁信息,以及針對抓取到的文本進行有效信息的提取。為了擴展抓取能力,本書介紹了實現分布式網絡爬蟲的關鍵技術。

本書介紹了如何開發網絡爬蟲。內容主要包括開發網絡爬蟲所需要的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.15.2 二進制文件 23

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.3.2 Robots協議 45

2.4 爬蟲架構 48

2.4.1 基本架構 48

2.4.2 分布式爬蟲架構 51

2.4.3 垂直爬蟲架構 54

2.5 自己寫網絡爬蟲 55

2.6 URL地址查新 57

2.6.1 嵌入式數據庫 58

2.6.2 布隆過濾器 60

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.2 Access數據庫 185

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 從HTML文件中提取文本 195

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.1 PDF文件 242

5.5.2 Word文件 245

5.5.3 Rtf文件 247

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.3 圖像二值化 274

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.1 大眾點評 339

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.2 樸素貝葉斯 384

8.2.3 支持向量機 393

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

網絡爬蟲全解析 技術 原理與實踐 精彩文摘

2.3 爬蟲相關協議

相比于人,爬蟲有更快的檢索速度和更深的層次,所以爬蟲可能使一個站點癱瘓。

抓取網站時,為了不影響用戶正常訪問該網站。爬蟲需要有禮貌。例如,它不會不告而訪,它會在自己的“user agent”中聲稱:“我是某某搜索引擎的爬蟲。”

有些網站希望爬蟲避免在白天對其網頁進行抓取,從而不影響白天正常的對外公眾服務,DNS服務提供商也不希望大量的域名解析工作量被搜索爬蟲的域名請求所占用。為了避免抓取的網站響應請求的負擔過重,爬蟲需要遵循禮貌性原則,不要同時發起過多的下載網頁請求,這樣才可能有更多的網站對爬蟲友好。為了減少網站對爬蟲的抱怨,建議每秒只抓取幾次,把抓取任務盡量平均分配到每個時間段,并且避免高峰時段對訪問的網站負擔過重。

2.3.1 網站地圖

為了方便爬蟲遍歷和更新網站內容,網站可以設置Sitemap.xml。Sitemap.xml也就是網站地圖,不過這個網站地圖是用XML寫的。例如,http://www.10010.com/Sitemap.xml。

在網站地圖中列出網站中的網址以及關于每個網址的其他元數據(上次更新的時間、更改的頻率以及相對于網站上其他網址的重要程度等),以便搜索引擎抓取網站。

完整格式如下所示。

XML標簽的含義說明如下。

l Loc:頁面永久鏈接地址。

l Lastmod:頁面最后修改時間。

l Changefreq:頁面內容更新頻率。

l Priority:相對于其他頁面的優先權。

2.3.2 Robots協議

作為一個爬蟲程序,在網上應該遵守爬蟲的“道德”。何謂爬蟲的“道德”?因為爬蟲會訪問網站,并下載其中的資源。尤其是多線程爬蟲,可能會在訪問一個網站的時候開啟多個線程,然后使用很多Session進行連接,爬取網頁,很容易造成網站癱瘓、不能訪問等后果。還有一種情況是網站有很多東西屬于自己的“秘密”,本身就不想讓爬蟲抓取,如果爬蟲隨意抓取,就相當于侵犯網站的“隱私”。

為了避免這種情況的發生,互聯網行業采用了兩種辦法,第一種是在網站的根目錄下放置一個文件,起名為robots.txt,其中規定了哪些內容不想被抓取;另一種是設置Robots Meta標簽。

robots.txt文件必須放置在站點的根目錄下,而且文件名必須小寫。該文件包含一條或更多的記錄,這些記錄用空行分開(以CR、CR/NL或者NL作為結束符),在該文件中可以用#進行注解,具體使用方法和UNIX中的慣例一樣。該文件中的記錄通常以一行或多行User-agent開始,后面加上若干Disallow行,詳細情況如下。

l User-agent:該項的值用于描述搜索引擎robots的名字。在robots.txt文件中,如果有多條User-agent記錄,說明有多個robots會受到該協議的限制,對該文件來說,至少要有一條User-agent記錄。如果User-agent的值設為*,則該協議對任何機器人均有效,在robots.txt文件中,“User-agent:*”這樣的記錄只能有一條。

l Disallow:該項的值用于描述不希望被訪問到的URL,這個URL可以是一條完整的路徑,也可以是部分路徑,任何以Disallow開頭的URL均不會被robots訪問到。

任何一條Disallow記錄為空,說明該網站的所有部分都允許被訪問,在robots.txt文件中,至少要有一條Disallow記錄。如果robots.txt是一個空文件,則該網站對于所有的搜索引擎Robots,都是開放的。一個robots.txt的例子如下所示。

以上例子表明這個網站的Robots協議對每個爬蟲都適用,并且不允許爬取/cgi-bin/、/tmp/和/private/下的文件。

當一個爬蟲訪問一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,如果存在,爬蟲就會按照該文件中的內容來確定訪問的范圍;如果該文件不存在,所有的爬蟲將能夠訪問網站上所有沒有被口令保護的頁面。

在HttpClient包中,當執行get或者post方法時,會默認提供對robots.txt的支持,不抓取Disallow規定的目錄下的網頁。當然,HttpClient也設置了默認選項,可以讓編寫的爬蟲不受 robots.txt協議的限制,但是,作為一個網絡爬蟲作者,我們還是提倡有“道德”的抓取,以保障互聯網行業健康發展。

現在我們討論第二種方法,即通過設置Robots Meta的值來限制爬蟲的訪問。這種方法是一種細粒度的方法,能夠把限制細化到每個網頁。和其他的Meta標簽(如使用的語言、頁面的描述、關鍵詞等)一樣,Robots Meta標簽也放在頁面的<head></head>中,專門用來告訴搜索引擎Robots如何抓取該頁的內容。

Robots Meta標簽中沒有大小寫之分,name=“Robots”表示所有的搜索引擎,可以針對某個具體搜索引擎寫為name=“BaiduSpider”。Content部分有4個指令選項:INDEX、NOINDEX、FOLLOW和NOFOLLOW,指令間以“,”分隔。

圖書網:網絡爬蟲全解析 技術 原理與實踐pdf

此資源下載價格為2圖書幣,請先
  • 我的微信
  • 掃一掃加好友
  • weinxin
  • 微信公眾號
  • 掃一掃關注
  • weinxin

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: