1. 程式人生 > >《自己動手寫爬蟲》筆記

《自己動手寫爬蟲》筆記

《自己動手寫爬蟲》這本書總體介紹了整個網路爬蟲由淺入深的知識體系,將爬蟲中每個部分分割開來具體的細講,非常適合新手來入門,由於之前只知道使用爬蟲框架,所以一遇到一些錯誤或者想調整一些爬架內容就無從下手,所以還是將一些基礎知識弄明白之後再去使用框架就會得心應手了。書中關於當前的分散式爬蟲的內容感覺有點少,感覺隨著資料爬取的增大,這部分的使用頻率應該會越來越多,還需要多向這個方面瞭解下。程式碼的部分佔據了很多的內容,完全可以把程式碼放到GitHub上,估計是撐頁數吧。總體來說還是非常值得學習的一本書。

下面記錄一下其中的知識點,以後再深入學習的時候再逐一完善其中的細節。


一:爬蟲全面剖析

1、get、post請求中URL長度引數的相關知識
2、在全球資訊網中,一個網頁的實際深度最多能達到17層
3、瞭解寬度優先爬蟲和帶偏好爬蟲
4、記憶體資料庫 – Berkeley DB | 開源軟體 – Heritrix
5、在對網址進行記憶體儲存的時候一般使用MD5進行壓縮
6、對已爬取過的URL使用布隆過濾演算法,建立Visited表

一個簡單的爬蟲架構:
這裡寫圖片描述


二:分散式爬蟲

1、Consistent Hash 負載平衡演算法
2、MapReduce 處理資料過程如下:

   map    (分解並行的任務)
    |
    √
 combine  (合成器,處理合成的list,提高reduce效率)
    |
    √
  reduce  (把處理後的結果彙總起來)

3、分散式爬蟲框架:Nutch(底層實現使用hadoop)


三:爬蟲中的細節問題

1、動態頁面 = 爬蟲黑洞 (使用Visited解決)
2、導向詞權重計算:

  • URL權重 = domain*a1 + link*a2 + parent.URL*a3 + depath*a4 + a5*
    a i

3、網頁評分:PageRank
4、主題爬蟲 / 理解限定爬蟲(採用URL建模)


四:處理HTML頁面

1、熟練掌握正則表示式的使用
2、使用Jsoup解析HTML檔案
3、通過找到最長文字來尋找網頁正文(網頁去噪)
4、使用Rhino來從JS中抽取資訊


五:非HTML正文抽取

1、使用PDFBox 來解析PDF檔案
2、使用POI處理office系列文件
3、使用PtfParser處理RTF檔案


六:多媒體資訊抽取

1、抽取視訊關鍵幀:一種方法為基於鏡頭邊界係數的關鍵幀提取策略,採用非極大值抑制法確定邊界係數極大值並排序。
2、使用JMF框架處理多媒體資料,框架特點:

  • 播放各種媒體檔案
  • 播放從網際網路下載的媒體流
  • 利用硬體擷取音訊、視訊並儲存
  • 處理媒體檔案,並轉換檔案格式
  • 在網際網路上上傳/播放資料或資料流

3、通過使用SourceForge中的org.farng.mp3解析MP3中的資料


七:網頁去噪

1、統計學降噪:網頁分類(網頁相似度計算)

抽象 — 序列的節點/DOM樹

2、HtmlParser對Html檔案解析為序列的節點
3、NekoHTML將Html解析為標準的DOM樹
4、比較網頁相似度的基本流程如下:

  • 將網頁抽象成一個節點資料
  • 計算兩個網頁對應的節點資料的最長公共子序列長度LCS-Length
  • 計算兩個網頁的相似度 :
Sim = (2*LCS-Length)/(Length1+Length2)

5、風格樹內確定噪聲元素
6、元素節點E的重要性
7、java使用統計去噪

  • 刪除噪音塊
  • 劃分段落
  • 評估段落

8、利用視覺降噪:網頁分塊演算法(VIPS)
9、java中的Cobra網頁渲染引擎


八:分析Web圖

1、連線關係網儲存:
小型爬蟲:儲存連線之間的關係放到記憶體中
大型爬蟲:在記憶體資料中建立連線關係
2、連接出度和入度進行排序

分析演算法基礎:
        PageRank:重要程度依賴網頁的入鏈,高等級檔案連線到網頁,等級也越高
        HITS演算法:通過迭代計算得到某個檢索提問的最有價值的網頁

九:去除重複文件

1、利用checksum演算法去重(MD5演算法)
2、利用“語義指紋”去重
3、利用SimHash排重


十:網頁分類

分類和聚類

  • 分類:支援向量機、線性判別函式、Boosting、AdaBoost分類、SVM、樸素貝葉斯、K近鄰、EM最大熵
  • 聚類:DBScan演算法(基於密度)、層次聚類、KMeans、資料流聚類