盛亞如
互聯網上的各種信息以數百萬級的方式增長著,而這些信息又大多是散亂分布的,無法滿足人們所要求的整合信息分析的需求,傳統的采集和收集方法又很難滿足要求。因此本文提出利用主題網絡爬蟲的概念和方法,運用正則表達式去匹配出網頁中所需要的特定信息數據,有效的增強爬蟲程序的適用性、縮短用戶獲取信息的時間。并將此方法應用于二手房信息數據采集中,包括價格、戶型、樓層等基本數據,建立起了一個統一的二手房數據庫。
【關鍵詞】主題網絡爬蟲 正則表達式 二手房
1 引言
互聯網上的信息數據以爆炸式的方式增長著,而這些信息數據內容又大多是基于頁面形式的,其中包含一些非結構化的數據,如文字、圖像、視頻等。如果只是采用人工化的方式對信息數據進行采集,已經很難滿足人們的要求了。因此有必要采用某種技術或手段從互聯網上自動采集信息數據。
網絡爬蟲能實現對互聯網信息數據的自動采集,從而彌補了人工采集的缺陷。網絡爬蟲是隨著搜索引擎發展而產生的一種通用信息采集技術,是搜索引擎中的核心部分,它根據用戶要求從互聯網上下載網頁,盡可能多的抓取網頁中的相關鏈接和內容,并能沿著鏈接繼續爬行,是一種能力強大的信息采集程序。
2 主題網絡爬蟲
主題網絡爬蟲是在通用網絡爬蟲的基礎上進行的延伸,根據某一領域內特定的主題進行相關信息的查詢,搜索互聯網抓取下載網頁,從網頁中采集相關信息數據和超鏈接。它并不會訪問所有的網頁,而是在訪問前就判斷超鏈接、錨文本、文本等與主題的相關度,按照相關度的高低來決定訪問的優先級順序。
主題網絡爬蟲的主要思想就是:把用戶搜索的查詢詞作為主題,從選定的初始URL出發,訪問網頁中的所有超鏈接,根據某種搜索策略對這些URL進行主題相關度預測,將符合要求的URL加入待訪問隊列中,并按照某種優先級排序從隊列中抽取URL來作為下一次要訪問的對象,按照這種規律執行下去,直到待訪問隊列為空或者滿足某種停止條件為止。
3 基于主題網絡爬蟲的信息數據采集方法與應用
通過分析網站頁面時發現,頁面中關于某一項主題的結構和框架都是一樣的,因此可以考慮運用正則表達式去匹配出頁面中我們所需要的鏈接和內容。下面以安居客網站為例進行二手房數據的采集。
3.1 網站頁面分析
3.1.1 鏈接地址頁面分析
通過觀察安居客青島市二手房的房源列表,我們發現,每一條房源信息的組織結構是一樣的,如房源地址的鏈接是上下結構排列的,價格,面積等信息的結構排列都是在同一個位置的。深入分析頁面源代碼發現,每一個房源鏈接的地址都是在herf=” ”引號之間,因此可以得出匹配房源鏈接地址的正則表達式:"
3.1.2 房源具體信息頁面分析
網站具體頁面中包含有房屋的售價、面積等基本信息,我們所建立的二手房數據庫就是把這些字段全部收集起來,放到一個數據表中以供后期使用。觀察網頁源碼我們可以發現,有些內容的源代碼前后的HTML標簽是不一樣的,因此,就有必要對我們所需要的每一項內容寫一個正則表達式,以匹配面積內容為例,可以得到正則表達式為:
3.2 采集流程
用戶選取要抓取的網站,系統由初始URL開始訪問網站,下載分析URL的源代碼,利用編寫好的正則表達式去匹配出此頁中的超鏈接和文本內容,將超鏈接加入到待抓取隊列中的同時,將文本內容存入數據庫中,根據先進先出的次序從待抓取隊列中抽取出新的URL開始訪問,依次進行下去,直到待抓取隊列為空或者滿足系統停止條件為止。
3.2.1 獲取網頁源代碼
爬蟲對網頁抓取的原理是通過Http協議請求訪問指定的URL資源,URL資源以html文檔的形式返回給爬蟲,然后通過對html文檔的解析完成信息的采集任務。首先,獲得URL后,系統通過Http協議發出訪問請求,一般采用GET方法;其次,根據HTTP響應判斷是否已成功加載此URL,如果成功加載,就會將網頁送到Html解析器中,根據UTF-8編碼形式,將語言轉換成一個統一的編碼形式,否則得到的就會是亂碼;最后,將得到的網頁源碼返回到一個變量中。
3.2.2 獲取房源鏈接地址列表
在系統設計的時候,定義了三個存儲URL的隊列:預讀房源隊列、已讀房源隊列、錯誤房源隊列。預讀房源隊列用于存儲將要訪問的URL隊列,已讀房源隊列用于存儲已經訪問過并成功采集信息的URL,錯誤房源隊列用于存儲不能訪問到的URL隊列。這3個隊列都是用動態數組進行存儲和表示的。
對選定的初始URL進行訪問和處理,由于Http響應的網頁是以字符串類型返回的,其中包含了大量的html代碼,這時就需要事先編寫好的正則表達式對其進行匹配,可以從title、meta等標簽中提取出所需要的信息。通過上文描述的匹配房源鏈接地址的正則表達式來匹配出初始網頁所含有的房源超鏈接地址,將其加入到預讀房源隊列中,同時利用正則表達式下一頁\s>;"匹配出下一頁的鏈接地址,并以下一頁的鏈接地址為初始URL,循環執行這一過程,直到下一頁的地址為空或者滿足停止條件為止。得到的匹配結果如圖1所示。
3.2.3 獲取房源信息數據
判斷預讀房源隊列是否為空,如果隊列為空,說明沒有要繼續爬行訪問的URL了,此時就結束爬行了,如果隊列不為空,則從預讀房源隊列中取出隊首的URL進行訪問,如果成功加載網頁,得到網頁的源代碼,根據編寫好的正則表達式對其進行匹配,并把匹配下來的內容保存到二手房數據庫中。最后,將當前URL加入到已讀房源隊列中,如果訪問不成功,就將此URL加入到錯誤房源隊列中。循環執行這一過程,直到預讀房源隊列為空或者滿足停止條件為止。
網頁展現給用戶的主要內容是它的文本信息。因此,在獲得網頁源代碼后,需要針對網頁抽取出它的特定內容。從預讀房源隊列中取出URL,解析其源代碼,利用正則表達式匹配出其頁面的具體信息,存入到數據庫中。以小區、戶型、面積為例,其正則表達式如圖2所示。
根據要求,創建二手房數據庫后,將匹配到的房產信息數據存入到數據庫中。得到的二手房數據庫部分結果如圖3所示。
4 總結
本文實現了一種切實可行的通過正則表達式去匹配信息數據的方法,滿足用戶對特定信息的需求,并將此方法應用于了二手房信息數據的采集中,成功抓取了網站上的二手房信息數據,建立起了一個二手房數據庫。
參考文獻
[1]孫駿雄.基于網絡爬蟲的網站信息采集技術研究[D].大連海事大學,2014.
[2]Dikaiakos M D,Stassopoulou A, Papageorgiou L.An investigation of web crawler behavior: characterization and metrics[J]. Physical Chemistry Chemical Physics, 2001,3(5):867-872.
[3]羅剛.自己動手寫網絡爬蟲[M].北京:清華大學出版社,2010.
[4]楊文剛, 韓海濤.大數據背景下基于主題網絡爬蟲的檔案信息采集[J].蘭臺世界(旬刊),2015(20):20-21.
作者單位
中國海洋大學信息科學與工程學院 山東省青島市 266100