曹根源 董斌智



摘要
數(shù)據(jù)科學正在改變著人們的生活從百度搜索推薦到今天網(wǎng)上的推薦資訊。對數(shù)據(jù)科學的構建,數(shù)據(jù)來源則是千里行之始。本文介紹用JAVA結合分布式技術實現(xiàn)的一個高效爬蟲系統(tǒng),希望能為數(shù)據(jù)研究者壘好數(shù)據(jù)高樓的基石。
【關鍵詞】數(shù)據(jù)分析 爬蟲 分布式
1 引言
京東是一家電商平臺,本文通過爬蟲技術獲取相關商品信息。JAVA是一門具備數(shù)據(jù)處理能力和并發(fā)多線程機制的成熟語言。本文通過爬蟲系統(tǒng)獲取商品信息,將數(shù)據(jù)保存到本地數(shù)據(jù)庫,最后進行數(shù)據(jù)分析。本系統(tǒng)可快速獲取商品信息,使用戶快速尋找心儀商品。分布式的技術也可供企業(yè)進行大規(guī)模數(shù)據(jù)爬取使用。
2 分布式爬蟲系統(tǒng)設計
2.1 設計需求
主要解決問題:
2.1.1 數(shù)據(jù)獲取和異常處理
通過URL爬取商品ID;分析頁面源碼,提取所需信息;建立數(shù)據(jù)字典并將數(shù)據(jù)存入數(shù)據(jù)庫。當某ID沒有爬取到時使用查錯機制。
2.1.2 分布式通信和多線程技術
前者用Socket實現(xiàn);后者使用Java線程池。
2.1.3 可復用技術和內存優(yōu)化
前者用心跳檢查機制,釋放失效主機;后者采用數(shù)據(jù)庫去重。
2.1.4 負載均衡
檢測每臺主機的性能,分發(fā)合適的任務。
2.1.5 反爬應對和數(shù)據(jù)庫優(yōu)化
前者使用cookies替換、IP代理等手段。后者采用水平劃分將ID獨立成表,為數(shù)據(jù)庫添加索引等。
2.2 相關JAVA模塊
2.2.1 網(wǎng)址管理
實現(xiàn)網(wǎng)址管理的方法有以下2類;
(1)JAVA內存:分析網(wǎng)站結構,減少重復URL的爬取。采用排隊機制,減少內存開銷。
(2)數(shù)據(jù)庫存儲和URL去重:前者采用數(shù)據(jù)庫去重。后者使用HashSet等進行去重。
2.2.2 分布式通信
分布式通信是爬蟲的主要模塊。
(1)Socket:采用JAVA的Socket包,讓客戶機在同一局域網(wǎng)內基于TCP進行通信。
(2)負載均衡:每次通信時檢測客戶機狀態(tài),根據(jù)LoadBalance算法計算出分配任務月巨。
(3)連接池和線程池:前者使用HttpClient連接池;后者用線程池管理線程,重用已完成任務的線程資源。
2.2.3 網(wǎng)頁信息解析
(1)手動解析:使用正則進行字符串提取。
(2)自動解析:XPath、BeautifulSoup。
2.2.4 反爬解決
查看網(wǎng)站是否需要驗證碼登錄,在爬取過程中檢測是否出現(xiàn)超時爬取等問題,制定相應解決反爬方案。
2.2.5 數(shù)據(jù)導出
將數(shù)據(jù)存儲于MySQL數(shù)據(jù)庫,在BDP平臺上進行數(shù)據(jù)分析。
3 實驗設計
通過對京東商品分類頁面進行抓取。代碼由1個主函數(shù)和4個功能函數(shù)構成。
3.1 總商品數(shù)據(jù)URL請求函數(shù)(requestUrl)
分析網(wǎng)站結構,用requestUrl函數(shù)請求商品數(shù)據(jù)頁面并將其存入Hash隊列進行去重處理。
3.2 負載均衡函數(shù)(LoadingBalance)
由客戶機向任務分發(fā)服務器提出請求,負載均衡函數(shù)檢測客戶機性能,并將結果反饋給分發(fā)任務服務器,分發(fā)任務服務器根據(jù)反饋信息將任務合理分配給請求任務的客戶機。
3.3 分析函數(shù)(Analying)和插入數(shù)據(jù)庫函數(shù)(InsertSQL)
客戶機獲取任務后根據(jù)商品網(wǎng)頁結構用分析函數(shù)(Analying)創(chuàng)建線程池和連接池向目標URL獲取數(shù)據(jù)后,通過插入數(shù)據(jù)庫函數(shù)(LnsertSQL)將數(shù)據(jù)插入數(shù)據(jù)庫。
3.4 主函數(shù)
設置任務服務器和客戶機的端口號以及IP地址,先啟動任務服務器,再啟動客戶機。
4 實驗結果
實驗中,共使用了分發(fā)任務服務器(PC機)一臺,客戶機(PC機)3臺,1小時內爬取商品數(shù)據(jù)80余萬條。運行結果如圖1所示。
5 結語
文章分析了分布式爬蟲獲取商品數(shù)據(jù)的細節(jié)實現(xiàn),對京東商城實現(xiàn)了高效爬取。同時介紹了解決反爬策略的基本思路。分布式技術的運用,使得爬蟲系統(tǒng)性能得到飛速提升。總的來說,分布式爬蟲具有較高的應用價值,對后期的數(shù)據(jù)分析具有重要意義。
參考文獻
[1]王桂梅.主題網(wǎng)絡爬蟲關鍵技術研究[D].哈爾濱工業(yè)大學,2009.