胡越 張源偉 雷軍
摘 要:當前互聯網技術飛速發展,針對網絡上存在的海量數據以及動態網站的出現,文中提出了一種用戶自定規則的AJAX網頁信息采集功能,該功能能夠提取動態網站上的數據,避免垃圾信息的干擾。與傳統信息提取系統相比,用戶可以自定規則,確定目標網站,半自動化以及自定規則操作,使信息提取更加準確和高效。
關鍵詞:自定規則;AJAX網頁信息;PhantomJS;提取數據
中圖分類號:TP393 文獻標識碼:A 文章編號:2095-1302(2016)09-0086-02
0 引 言
當前在數據量龐大的互聯網世界中,網絡上的信息存在諸多問題。虛假信息、重復信息、廣告干擾等這些信息往往都是冗余或者無用的信息,加上互聯網技術的發展與AJAX技術的興起,許多站點從可維護性和增加用戶體驗的角度將數據與網頁分離,通過AJAX從數據庫動態生成數據,而有用的信息往往存在于這些數據中,但搜索引擎無法直接搜索到AJAX網頁信息[1]。自定規則的動態網頁信息能夠采集AJAX網頁信息,并且用戶可以自由選取網站并自定采集規則,功能垂直,目標專一,能夠高效且快速地獲取網頁信息。
1 AJAX網頁信息生成原理
據中國互聯網中心統計,當前中國的網站有百分之四十多都是動態網站,幾乎占據了中國互聯網的半壁江山,而日常人們主要通過搜索引擎來獲取自己感興趣的信息,搜索引擎的核心之一是網絡蜘蛛(Web Spider)。網絡蜘蛛通過給定的起始頁面按照一定的規則提取頁面中的鏈接,直到沒有鏈接,蜘蛛才停止提取[2]。這其中的過程僅僅解析了網頁的源代碼,卻沒有把網頁信息寫入網頁源代碼中,因此爬蟲收集的只是沒有加載動態信息的網頁資源。當用戶瀏覽動態網頁時,首先在瀏覽器的地址欄輸入網頁的URL,向對應的服務器發送請求獲取該URL對應的頁面,當獲取到頁面時,此時并沒有獲取到網頁的信息,瀏覽器的JS(JavaScript)解析器會繼續解析寫在網頁中的JS代碼,作為動態網頁,數據通過頁面中的JS繼續向服務器請求數據庫中的數據,而傳統的網絡蜘蛛并沒有執行這些后續請求,蜘蛛的功能僅相當于瀏覽器的第一個請求網頁的動作,在瀏覽器中通過查看網頁源代碼可以看到一些AJAX信息并沒有顯示在源代碼中,而網頁中能夠顯示信息,正是由于瀏覽器中后續的JS解析。該過程的原理圖如圖1所示。
在該網頁信息生成的過程中,只有當客戶端請求到頁面之后,再通過客戶端中的JS解析器解析網頁中的JS數據請求代碼,才會從數據庫請求數據并寫入頁面。
2 自定規則采集功能設計
根據前面所分析的原理可知,僅單純的使用一個get請求來獲取AJAX頁面中的信息在原理上是不可行的,因為服務器端并不能解析JS代碼,只有在客戶端才能解析,服務器端只能夠將網頁原封不動地返回給客戶端,存在于網頁源代碼中的JS數據請求并沒有運行。作為一套信息采集系統,該系統的全部功能模塊必須都放在服務器環境中,只有通過一個可以完全解析網頁的引擎才能使服務器端解析JS獲取網頁信息。經過摸索和查找,認為JS的開源工具包PhantomJS可以完成該項功能??梢詫hantomJS引擎存放于服務器端,通過服務器端語言來調用,這里使用PHP語言。
2.1 自定規則功能結構的設計
屬于一個網站的所有頁面的結構基本類似,網站與網站之間的結構可以完全不同,也可以類似,但網頁結構幾乎不可能完全一樣,即使存在輕微差別,也會導致一些信息的提取規則完全不同。因此一旦寫死了某一個網站的提取規則,隨著網站的改版,可能其中頁面的結構發生了變化,僅HTML標簽名屬性發生變化就會導致抽取規則的改變,因此用戶自定規則能夠很好地解決問題[3-8]。提取信息的規則寫在JS文件中,除開PhantomJS函數,用戶只需要寫提取網站信息的DOM規則。在前臺設計一個用戶上傳規則和選取規則的功能,服務器端設定一個專門存放規則的文件夾,前臺能夠讀取用戶上傳的規則,從而完成目標頁面信息的提取。自定規則工作原理圖如圖2所示。
用戶寫入核心的DOM規則上傳到規則庫。當用戶需要使用該規則時,前臺可以加載規則庫中的文件,通過選取指定的文件,服務器將文件名傳入PhantomJS引擎中,接收網站的鏈接以目標網頁進行信息提取,返回信息經處理后返回客戶端。
2.2 PhantomJS與PHP通信
服務器中存放一個PhantomJS可執行文件,稱其為PhantomJS引擎,該引擎通過命令窗口運行一個JS為后綴的文件,該文件中寫入一些PhantomJS的接口函數和網頁鏈接以及信息提取規則。作為單純的信息提取,JS文件中的PhantomJS接口函數是固定的,它們可以完成解析和加載網頁,使網頁內部的JS源代碼完全執行。PHP函數庫中存在一個調用可執行文件的函數exec()。利用該函數調用PhantomJS可執行文件,PhantomJS運行用戶自定規則的JS文件,從而進行動態信息的提取。例如exec("chcp 65001 && cd /d f:/phantomJS/phantomjs-2.0.0-windows && phantomjs sample.js {$url}",$arr,$i),該語句表示通過phantomJS執行sample.js文件,傳入頁面的鏈接為$url,返回的結果存入$arr中。Sample.js文件中的代碼如下:
3 結 語
本文提出了一種能夠自定規則提取AJAX網頁信息功能的設計,通過測試能夠成功提取動態AJAX網頁信息,相較于傳統的網絡蜘蛛,自定規則設計可以更好更貼合用戶需求來對指定網站進行信息提取,避免了虛假網站的干擾和重復信息的冗余。相較于傳統的dom信息提取系統,該信息提取功能加入了PhantomJS包,能夠提取傳統dom無法提取的動態信息,功能得到了加強。
參考文獻
[1]張小集,白清源.可自定規則的Ajax網頁信息采集框架的開發[J].電腦開發與應用,2014,27(10):29-31.
[2]翁巖青.網頁抓取策略研究[D].哈爾濱:哈爾濱工程大學,2010.
[3]徐超.基于DOM的網頁凈化方法研究[D].青島:中國石油大學,2009.
[4]于靜.基于頁面主體提取的WEB信息抽取技術研究[D].南京:南京郵電大學,2013.
[5]劉冠軍.Web對象提取檢索系統的設計與實現[D].北京:北京大學,2008.
[6]李猛.基于DOM的web信息抽取的研究與實現[D].大連:大連理工大學,2008.
[7]王桂紅.農產品市場價格web信息分析系統方法研究[D].沈陽:沈陽農業大學,2013.
[8]蘇小魯.基于DOM的HTML網頁正文信息抽取模塊的設計與實現[D].北京:北京郵電大學,2011.