基于 WEB 挖掘的網絡爬蟲設計與實現
- 2019-01-17 15:16:00
- admin 轉貼
隨著互聯網的不斷發展和普及, web 成為人們不可缺少的一部分, 同時也是人們獲得信息的重要途徑. 如何充分有效地利用 web 中數量龐大的信息成為一個不可回避的問題, web 數據挖掘技術也逐漸成為 web 技術中的重要部分. Web 挖掘是指綜合利用數據挖掘技術對 Web 內容、Web 結構及 Web 日志等進行分析處理, 從中獲得對決策制定有價值的各種信息的過程.
1 數據挖掘與Web挖掘
Web 挖掘技術與傳統的數據挖掘的比較, 主要區別在于數據收集. 對于 web 挖掘而言, 數據收集是一個具有挑戰性的任務, 在對 Web 結構和內容挖掘時, 需要爬取大量的網頁, 如何高效地爬取網頁并處理獲取的網頁信息是數據收集的關鍵也是其難點. Web 爬蟲是Web 挖掘中重要技術之一, 是爬取頁面的重要手段, 通過爬蟲的構建達到 Web 信息搜索的目的
傳統的數據挖掘又稱為數據庫知識發現. 是指從數據源(如數據庫、文本、圖片、萬維網等)中探尋有用的模式或知識的過程. 對于數據挖掘模式來說必須是有用, 有潛在價值的. 它主要基于人工智能、機器學習、模式識別、統計學、數據庫、可視化技術等, 高度自動化地分析企業的數據, 做出歸納性的推理, 從中挖掘出潛在的模式, 幫助決策者調整市場策略, 減少風險, 做出正確的決策.
其知識的獲取主要分為三個步驟: 預處理、數據挖掘和后續處理, 同時整個過程可以進行迭代, 通過多次迭代獲得最終結果.
隨著萬維網和文本文件的規模擴大, 文本挖掘和Web挖掘也越來越流行. 文本挖掘是從文本文件中抽取到有效且有價值的信息, 進行整合和分類后獲得更高的價值. 而 Web 挖掘是指在萬維網上挖掘潛在的、有用的信息. Web挖掘的數據與傳統數據不同, 既存在結構化數據, 也存在半結構化數據, 如:圖片, 文本, 異構數據等.
正因為數據不同, 所以比傳統的單個數據庫挖掘要復雜的多. 通過Web 挖掘出來后的數據, 可以通過分析為用戶提供更好的服務, 也能從中獲得潛在的客戶、用戶和市場. 雖然Web挖掘使用許多數據挖掘技術, 但是又不僅僅是數據挖掘的一個運用. Web挖掘任務主要被分為三種類型: Web結構挖掘\Web 內容挖掘和Web使用挖掘.Web爬蟲是Web挖掘的一種較為常用的實現方式, 也是搜索引擎的重要組成. Web爬蟲是一個獲取網頁信息的程序, 它通過在Web上下載網頁來獲取數據. 傳統的Web爬蟲從一個或若干初始網頁的URL開始, 獲得初始網頁上的URL, 在抓取網頁的過程中, 不斷從當前頁面上抽取新的URL放入隊列, 直到滿足系統的一定停止條件而終止數據爬取行為. 正因為 Web 爬蟲具有自動而高效地獲取信息的能力, 常常用來建立數據倉庫, 達到 Web 信息搜索的目的.
2 信息搜索與數據挖掘
對于 Web 網絡中的數據, 是復雜、異質和龐大的, 對待如此具有針對性和多變性的海量信息進行挖掘時, 數據挖掘的技術也要隨之而加以改進. 因此要為它搭建新的挖掘模型, 提出新的挖掘算法和體系結構[5]. 對此我們提出一個較為簡單, 通用的數據搜索模型, 如圖 1 所示.
圖 1 數據搜索引擎模型
在整個模式中, 爬蟲對于數據獲取是不可或缺的. 它對互聯網中一些相關有用的信息, 進行挖掘, 充實數據庫內容并及時讓信息得到更新.現今網絡資源以文本資源為主, 爬蟲則是從一系列種子網頁開始, 結合內容和鏈接進行信息采集, 可以采集到圖片, 音頻, 甚至包括多媒體在內的多媒體信息資源, 不僅僅獲得了信息資源的完整性, 同時還高效的獲得數據資源, 為模型打下牢固的基礎.
采集到的信息對象首先要進行預處理, 對一些不符合要求的信息和壞死鏈接進行剔除, 再將處理后的信息存入相應的數據庫中. 數據庫由文本庫和其他媒體庫組成, 結合用戶人工輸入查詢的特點, 進行規范的排列. 最后導出為實際數據倉庫, 為以后數據分析和決策支持系統提供數據支持
3 Web爬蟲模型設計與實現
互聯網由數以 10 億計的網頁構成, 對于其中的靜態網頁來說, 采集信息時只要將所有網頁取回, 并存放到網頁庫內即可. 但事實上, 絕大多數網頁是一個動態的實體, 因此也要進行網頁的同步更新抓取, 即進行增加, 刪除, 移動, 修改鏈接等操作.
3.1 爬蟲原理
3.1爬蟲原理
在了解網頁的基本結構后, 我們針對通用型網頁, 構建了一個簡單的順序爬蟲, 該爬蟲主要使用廣度優先算法, 通過添加對 URL 相應內容進行分析, 將有用的 URL 加入隊列. 爬蟲流程圖如圖 2 所示.
圖 2 順序爬蟲流程圖
當一張網頁爬取下來后, 就可以對其進行內容解析. 通過獲取頁面的DOM 樹結構, 再用程序語言將其通過分析出來有用的URL 獲取下來存入數據庫中, 最后記錄該URL 的層級. 以下代碼段是利用正則匹配方法獲取有用的 URL.
$str='<ahref="url.html"><span>text1</span></a>'; preg_match_all('%<a[\s\S]*?href="([^"]+)[^>]+>([\s\S
]*?)</a>%', $ str, $result, PREG_PATTERN_ORDER); var_dump($result);
爬蟲程序每次抓取一張頁面內容, 不對其他資源進行抓取. 對第一次獲得的 URL 進行記錄, 當程序第一次執行完成后, 將數據表里分析出來 URL 取出存入URL 列表隊中. 在進行初始化時, 僅存入數據表里提供的 URL. 之后, 通過 URL 列表隊中的 URL 再對列表隊中每一個 URL 頁面進行逐個抓取, 將新獲得的 URL 追加到列表隊中并存入數據表中, 進行層級記錄.當主程序判斷 URL 列表隊為空時, 停止程序. 如主程序遇到報錯或一些其他原因, 可以利用預設條件或跳過該URL, 直接進行下個 URL 頁面抓取, 并在數據庫錯誤隊列中存入數據段以記錄報錯 URL, 待后面進行分析原因.
每次從 URL 列表隊中抓取完一個 URL 頁面后, 進行列表隊內存釋放以提高效率. 程序中要設定 URL 優先級, 當 URL 列表隊成員過多時, 進行優先級較低級的URL 踢出隊列, 并在數據庫中記錄未抓取再將其加入備用隊列中, 可以進一步優化爬取的效率.
3.2 初始化 URL
URL 列表隊的初始化是先將列表隊伍清空, 并使其成為先進先出列表隊. 每次先入隊列的 URL 地址, 位于隊列隊首, 隊首 URL 地址先進行爬取. 當頁面信息獲取完后, 清除該URL 地址, 并將下個URL 地址提取到隊首來, 新加入隊列的URL 地址添置到隊列尾部. 每一次都是從隊首中獲取 URL 地址, 一直到整個隊列中沒有URL 地址, 則停止程序的運行.
3.3 解析網頁
對于每個運用需求的不同, 爬蟲也需要進行進一步的內容判斷. 對于類似圖片、音樂、pdf 等不同的文件類型, 先進行圖片地址獲得, 但是不加入 URL 列表隊, 程序段如下:
$conn = file_get_contents($url);
$preg = "# <div><a target=\"_blank\"
爬蟲程序每次抓取一張頁面內容, 不對其他資源進行抓取. 對第一次獲得的 URL 進行記錄, 當程序第一次執行完成后, 將數據表里分析出來 URL 取出存入URL 列表隊中. 在進行初始化時, 僅存入數據表里提供的 URL. 之后, 通過 URL 列表隊中的 URL 再對列表隊中每一個 URL 頁面進行逐個抓取, 將新獲得的 URL 追加到列表隊中并存入數據表中, 進行層級記錄.當主程序判斷 URL 列表隊為空時, 停止程序. 如主程序遇到報錯或一些其他原因, 可以利用預設條件或跳過該URL, 直接進行下個 URL 頁面抓取, 并在數據庫錯誤隊列中存入數據段以記錄報錯 URL, 待后面進行分析原因.
每次從 URL 列表隊中抓取完一個 URL 頁面后, 進行列表隊內存釋放以提高效率. 程序中要設定 URL 優先級, 當 URL 列表隊成員過多時, 進行優先級較低級的URL 踢出隊列, 并在數據庫中記錄未抓取再將其加入備用隊列中, 可以進一步優化爬取的效率.
本爬蟲在 12396 湖南農業信息服務網、議論紛紛、佐名片等多個網站進行了爬取實驗, 爬取不同的網頁所得到的效率有所不同. 而且, 爬取的效率也與對方服務器性能、寬帶、用戶訪問量以及爬蟲程序所在主機的硬件配置等因素相關. 最終平均所有實驗結果得出平均值: 在帶寬 4M, 內存 2G 的主機上解析頁面并且下載頁面中圖片的效率為: 每分鐘 12 張質量較高的圖片. 通過添加對 URL 分析過濾功能后, 對于一些沒有用的URL 地址進行剔除, 能更好的提高爬蟲的效率.
在整個爬取過程中, 有大約 80%的時間處在網頁的下載過程中, 其中包括, 網頁 HTML 節點獲取, 圖片下載, 數據整合, 數據庫連接等, 大約 20%時間用于數據分析、數據分類、與網絡通信和內存釋放等計算機處理. 通過爬取比對實驗得出: 獲取數據正確率與通用爬蟲相比提高約 32%, 錯誤 URL 減少約 55%, 數據整合時間減少了近 37%.
4 結語
在網絡數據量急劇膨脹的今天, 如何利用 Web 數據挖掘的技術高效獲取所需信息成為一種必需. 而對于 Web 挖掘來說 Web 爬蟲運用最廣泛, 本文中主要運用 Web 結構挖掘, 通過對鏈接中尋找有用的信息的方法, 對爬取出來的信息進行抽取, 然后進行分類或聚合后最終獲得有用的信息. 再對這些信息做進一步分析, 還可得到用戶搜索方式和行為等其他信息資源, 為 SEO 等相關操作提供數據支持