本發(fā)明涉及一種分布式網(wǎng)絡(luò)爬蟲系統(tǒng)及調(diào)度方法,更具體的說,尤其涉及一種基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)及調(diào)度方法。
背景技術(shù):
:大數(shù)據(jù)時(shí)代的來臨,網(wǎng)絡(luò)上所承載的信息愈加豐富,其中既有指導(dǎo)行業(yè)發(fā)展走向的政策類網(wǎng)站,也有介紹相關(guān)領(lǐng)域最新科技動態(tài)及競爭對手產(chǎn)品信息的新聞類網(wǎng)站,還有反映用戶對產(chǎn)品評價(jià)的博客、論壇、微博等社交網(wǎng)站。外網(wǎng)數(shù)據(jù)的有效接入和應(yīng)用對各級各類企業(yè)輔助決策、制定計(jì)劃、管理成本、銷售運(yùn)營、服務(wù)售后等提供信息支持,為企業(yè)更好知己知彼掌控市場打開了一扇窗口。網(wǎng)絡(luò)爬蟲起始于種子鏈接穿行于internet,將訪問到的頁面下載至本地,為網(wǎng)絡(luò)數(shù)據(jù)采集提供技術(shù)支撐,為企業(yè)深度挖掘和分析網(wǎng)絡(luò)數(shù)據(jù)奠定良好開端。根據(jù)網(wǎng)絡(luò)爬蟲所部署的地理位置和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)不同,可以將網(wǎng)絡(luò)爬蟲分為部署于同一局域網(wǎng)的單一域網(wǎng)絡(luò)爬蟲(single-domaindistributedcrawler,又稱局域網(wǎng)爬蟲)和分散部署于廣域網(wǎng)的多域網(wǎng)絡(luò)爬蟲((multi-domaindistributecrawler,又稱廣域網(wǎng)爬蟲)。無論是單一域網(wǎng)爬蟲還是廣域網(wǎng)爬蟲最基本的功能均是網(wǎng)頁數(shù)據(jù)抓取,而其靈魂則是調(diào)度策略,調(diào)度策略不同則抓取方法不同。調(diào)度策略主要包括種子鏈接分配策略、負(fù)載均衡策略、網(wǎng)頁查重策略等。當(dāng)前種子鏈接分配策略主要分為獨(dú)立方式、靜態(tài)方式和動態(tài)方式三類。獨(dú)立方式中各網(wǎng)絡(luò)爬蟲互不通信獨(dú)立采集各自頁面;靜態(tài)方式預(yù)先劃分所有網(wǎng)絡(luò)鏈接,將劃分好的鏈接分配給網(wǎng)絡(luò)爬蟲;動態(tài)方式動態(tài)地為各網(wǎng)絡(luò)爬蟲分配網(wǎng)絡(luò)鏈接,網(wǎng)絡(luò)爬蟲完成當(dāng)前抓取任務(wù)時(shí)為其分配新的抓取任務(wù)。無論何種分配方式一般均是以域名(主機(jī))為單位劃分種子鏈接以降低通信開銷。目前負(fù)載均衡策略主要分為靜態(tài)負(fù)載均衡和動態(tài)負(fù)載均衡,其中靜態(tài)負(fù)載均衡主要有輪詢方式、比率方式、優(yōu)先權(quán)方式等;而動態(tài)負(fù)載均衡在抓取過程中收集各爬蟲服務(wù)器負(fù)載信息,根據(jù)負(fù)載情況遷移節(jié)點(diǎn)任務(wù)。無論何種均衡策略其任務(wù)遷移的對象均是網(wǎng)絡(luò)鏈接,將高負(fù)荷爬蟲的網(wǎng)絡(luò)鏈接分配給低負(fù)荷爬蟲,以均衡整個系統(tǒng)的負(fù)載。常用的網(wǎng)頁查重策略有基于數(shù)據(jù)庫的查重方式、基于b-樹的去重方式、基于hash的去重方式、基于md5編碼的去重方式、基于bloom的去重方式、基于廣義表結(jié)構(gòu)的去重方式等等。國內(nèi)外的一些公司對大型網(wǎng)絡(luò)爬蟲已有成熟的解決方案,但是這些大型搜索引擎只能給大眾用戶提供一種普通不可定制的搜索服務(wù),不可能考慮到不同用戶的個性化需求。然而各類組織無論是政府機(jī)關(guān)、事業(yè)單位還是不同規(guī)模的企業(yè)在描述信息需求時(shí),更傾向于使用一組關(guān)鍵詞來描繪所關(guān)注的業(yè)務(wù)領(lǐng)域,且隨著時(shí)間的推移這些關(guān)鍵詞也會不斷演進(jìn)和變化。因此網(wǎng)絡(luò)爬蟲公司所提供的通用服務(wù)難以滿足組織的深層信息需求,需要為組織個性化定制可部署于組織內(nèi)的分布式網(wǎng)絡(luò)爬蟲。除大型跨國公司及集團(tuán)類公司,大多數(shù)組織辦公地點(diǎn)通常集中于同一區(qū)域,因此一般先是通過組建局域網(wǎng)(localareanetwork,lan)實(shí)現(xiàn)組織內(nèi)的辦公自動化(officeautomation,oa),而后通過路由器接入運(yùn)營商的方式訪問internet。就此而言,單一域網(wǎng)爬蟲更適合于大多數(shù)組織的網(wǎng)絡(luò)數(shù)據(jù)抓取。組織對web信息的需求并不僅局限于政策導(dǎo)向類的網(wǎng)站或新聞發(fā)布類的網(wǎng)站,為了更進(jìn)一步地了解目標(biāo)用戶的需求,組織還需抓取論壇、微博等社交媒體平臺數(shù)據(jù)。為應(yīng)對領(lǐng)域的瞬息萬變,組織需實(shí)時(shí)了解人們話題討論的熱點(diǎn)、風(fēng)向、傾向等,這對社交媒體平臺數(shù)據(jù)抓取提出了較高的實(shí)時(shí)性要求。然而在訪問internet過程中,單一域網(wǎng)爬蟲將共享運(yùn)營商分配的同一個ip地址,大多數(shù)的組織很難擁有獨(dú)屬于自己的多個公網(wǎng)ip地址。受目標(biāo)數(shù)據(jù)源服務(wù)器的限制,同一ip地址的爬蟲在一定時(shí)間內(nèi)只能采集同一目標(biāo)服務(wù)器限定的數(shù)據(jù)。即使組織在局域網(wǎng)內(nèi)設(shè)置了多個爬蟲,這些爬蟲在訪問目標(biāo)服務(wù)器的過程中也將被運(yùn)營商分配相同的ip地址,因此當(dāng)其中一個爬蟲達(dá)到訪問上限時(shí),其余爬蟲也將被拒絕訪問。這對組織爬取數(shù)據(jù)的覆蓋性和完整性提出了極大的挑戰(zhàn)。因此如何在局域網(wǎng)內(nèi)為組織部署分布式網(wǎng)絡(luò)爬蟲,以及如何為部署于局域網(wǎng)中的分布式爬蟲設(shè)置合適調(diào)度策略,利用有限的ip地址應(yīng)對不同類型網(wǎng)絡(luò)媒體為組織盡可能多的采集數(shù)據(jù)是本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)構(gòu)建的主旨。技術(shù)實(shí)現(xiàn)要素:本發(fā)明為了克服上述技術(shù)問題的缺點(diǎn),提供了一種基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)及調(diào)度方法。本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng),其特征在于:包括部署于同一組織局域網(wǎng)內(nèi)的爬取設(shè)置客戶端、爬取主控節(jié)點(diǎn)、多個爬取節(jié)點(diǎn)、url索引服務(wù)器、數(shù)據(jù)中心和用戶,以及多個遠(yuǎn)程vpn代理服務(wù)器;組織局域網(wǎng)通過路由器接入運(yùn)營商的方式訪問internet,以便爬取節(jié)點(diǎn)使用vpn代理服務(wù)器訪問internet中的目標(biāo)數(shù)據(jù)源服務(wù)器;爬取設(shè)置客戶端用于配置數(shù)據(jù)源、關(guān)鍵詞、爬取策略,爬取主控節(jié)點(diǎn)根據(jù)爬取設(shè)置客戶端的配置為爬取節(jié)點(diǎn)分配任務(wù),實(shí)現(xiàn)爬取節(jié)點(diǎn)的調(diào)度以及均衡各爬取節(jié)點(diǎn)的負(fù)載;爬取節(jié)點(diǎn)中部署著網(wǎng)絡(luò)爬蟲系統(tǒng),爬取節(jié)點(diǎn)根據(jù)爬取主控節(jié)點(diǎn)分配的任務(wù)選擇一個vpn連接連入遠(yuǎn)程vpn代理服務(wù)器,使用vpn代理服務(wù)器訪問internet中的目標(biāo)數(shù)據(jù)源服務(wù)器;url索引服務(wù)器記錄已爬取過的url及爬取時(shí)間,數(shù)據(jù)中心用于存儲抓取的網(wǎng)頁數(shù)據(jù);用戶是網(wǎng)絡(luò)數(shù)據(jù)的使用者,通過與數(shù)據(jù)中心的交互獲取相關(guān)數(shù)據(jù)。本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng),所述爬取主控節(jié)點(diǎn)、爬取節(jié)點(diǎn)、url索引服務(wù)器和數(shù)據(jù)中心可采用邏輯劃分,并非每個設(shè)備均需一個物理設(shè)備與其對應(yīng);url索引服務(wù)器可合并到數(shù)據(jù)中心,由數(shù)據(jù)中心承擔(dān)已爬取url的記錄;所述爬取設(shè)置客戶端可以是任意具有爬取設(shè)置權(quán)限的用戶。本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的調(diào)度方法,通過以下步驟來實(shí)現(xiàn):a).確定新聞類網(wǎng)站和社交媒體類網(wǎng)站的數(shù)據(jù)采集方法,對于信息更新頻率和數(shù)量較低的新聞類網(wǎng)站,采用爬蟲直接抓取目標(biāo)源數(shù)據(jù),再使用關(guān)鍵詞進(jìn)行數(shù)據(jù)過濾;對于信息更新頻率和數(shù)量極高的社交媒體類網(wǎng)站,利用目標(biāo)數(shù)據(jù)源的站內(nèi)檢索結(jié)合關(guān)鍵詞獲取有效信息,再使用爬蟲抓取檢索結(jié)果;b).爬取主控節(jié)點(diǎn)為各爬取節(jié)點(diǎn)分配任務(wù),對于新聞類網(wǎng)站,將同一域名的新聞類網(wǎng)站分配給一個爬取節(jié)點(diǎn)采集目標(biāo)源數(shù)據(jù);對于社交媒體類網(wǎng)站,將同一域名的社交媒體類網(wǎng)站分配到全部爬取節(jié)點(diǎn),并為每個爬取節(jié)點(diǎn)分配互不相同的關(guān)鍵詞;c).各爬取節(jié)點(diǎn)生成初始采集目標(biāo)數(shù)據(jù)源url列表,爬取主控節(jié)點(diǎn)為每個爬取節(jié)點(diǎn)分配vpn連接列表、新聞類網(wǎng)站采集入口url地址、社交媒體類采集入口url地址以及關(guān)鍵詞后,爬取節(jié)點(diǎn)從vpn連接列表中選擇最久未使用的vpn連接連入遠(yuǎn)程vpn代理服務(wù)器,使用vpn代理服務(wù)器訪問新聞類網(wǎng)站和社交媒體類網(wǎng)站;設(shè)爬取節(jié)點(diǎn)獲取的新聞類網(wǎng)站的網(wǎng)頁url地址列表為url_init_listweb,獲取的社交媒體類網(wǎng)站的檢索入口url地址列表為url_init_listsoc,爬取節(jié)點(diǎn)的初始采集目標(biāo)數(shù)據(jù)源列表url_init_list為url_init_listweb與url_init_listsoc的并集;d).各爬取節(jié)點(diǎn)確定最終采集目標(biāo)數(shù)據(jù)源url列表,爬取節(jié)點(diǎn)通過將url_init_list與url索引服務(wù)器所維護(hù)的url_list進(jìn)行比較、判斷采集過url地址與初次訪問時(shí)間差是否小于相應(yīng)網(wǎng)頁類型的重訪問時(shí)間,形成中間采集目標(biāo)數(shù)據(jù)源列表url_intermed_list;然后通過對url_intermed_list進(jìn)行混排生成最終采集目標(biāo)數(shù)據(jù)源列表url_final_list;e).各爬取節(jié)點(diǎn)采集目標(biāo)數(shù)據(jù)源列表的網(wǎng)頁數(shù)據(jù),爬取節(jié)點(diǎn)采集url_final_list列表中各url地址所指向的網(wǎng)頁數(shù)據(jù),對于新聞類網(wǎng)頁按照網(wǎng)站分組,將網(wǎng)頁數(shù)據(jù)存放到新聞類網(wǎng)站結(jié)果列表data_final_listweb中;對于社交媒體類網(wǎng)頁,將網(wǎng)頁數(shù)據(jù)存放到社交媒體結(jié)果列表data_final_listsoc中;并將data_final_listweb和data_final_listsoc打包發(fā)送給數(shù)據(jù)中心;f).url索引服務(wù)器維護(hù)更新url列表,url索引服務(wù)器接收到爬取節(jié)點(diǎn)發(fā)送的url_list更新請求后,將所要更新的url地址添加到url_list列表中,并將訪問時(shí)間設(shè)置為當(dāng)前時(shí)間,實(shí)現(xiàn)url_list列表的更新;g).各爬取節(jié)點(diǎn)將爬取結(jié)果存儲到數(shù)據(jù)中心,各爬取節(jié)點(diǎn)逐一采集各自最終采集目標(biāo)數(shù)據(jù)源列表url_final_list中每條url數(shù)據(jù)源,將采集結(jié)果緩存至本地,在完成列表url_final_list中所有數(shù)據(jù)源的采集后,將采集到的數(shù)據(jù)一次性發(fā)送至數(shù)據(jù)中心;h).各爬取節(jié)點(diǎn)向爬取主控節(jié)點(diǎn)匯報(bào)狀態(tài),各爬取節(jié)點(diǎn)按照約定時(shí)間,定時(shí)向爬取主控節(jié)點(diǎn)發(fā)送心跳信號和各自的采集時(shí)間表;i).爬取主控節(jié)點(diǎn)根據(jù)所匯報(bào)的狀態(tài)調(diào)節(jié)負(fù)載,爬取主控節(jié)點(diǎn)根據(jù)計(jì)算的新聞類網(wǎng)站的權(quán)重和社交媒體類網(wǎng)站的各關(guān)鍵詞權(quán)重,對各爬取節(jié)點(diǎn)的負(fù)載做出均衡調(diào)整。本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的調(diào)度方法,設(shè)爬取節(jié)點(diǎn)數(shù)為ncl,不同域名的新聞類網(wǎng)站數(shù)為nweb,不同域名的社交媒體類網(wǎng)站數(shù)為nsoc,社交媒體類網(wǎng)站的關(guān)鍵詞數(shù)為nkw;則步驟b)中,為每個爬取節(jié)點(diǎn)平均分配個不同域名的新聞類網(wǎng)站,將域名不同的社交媒體類網(wǎng)站分配到所有爬取節(jié)點(diǎn),并為每個爬取節(jié)點(diǎn)平均分配個不同的關(guān)鍵詞;爬取主控節(jié)點(diǎn)維護(hù)著爬取節(jié)點(diǎn)任務(wù)分配表、爬取節(jié)點(diǎn)心跳表和vpn連接賬戶表,新聞類網(wǎng)站的任務(wù)分配表中記錄各個爬取節(jié)點(diǎn)所分配到的網(wǎng)站及各個網(wǎng)站的權(quán)重,新聞類網(wǎng)站webi的權(quán)重的計(jì)算公式為:其中,為抓取新聞類網(wǎng)站webj所花費(fèi)的時(shí)間,i∈[1,nweb],j∈[1,nweb];初始采集各新聞類網(wǎng)站花費(fèi)時(shí)間未知時(shí),認(rèn)為所有新聞類網(wǎng)站采集時(shí)間相同,則各新聞類網(wǎng)站的初始權(quán)重為社交媒體類網(wǎng)站的任務(wù)分配表中記錄各個爬取節(jié)點(diǎn)在每個社交媒體類網(wǎng)站中所分配到的關(guān)鍵詞以及不同社交媒體類網(wǎng)站不同關(guān)鍵詞的權(quán)重,社交媒體類網(wǎng)站soci中關(guān)鍵詞kwj的權(quán)重的計(jì)算公式為:其中,為在社交媒體類網(wǎng)站soci中采集關(guān)鍵詞kwk相關(guān)的信息所所花費(fèi)的時(shí)間,i∈[1,nsoc],j、k∈[1,nkw];初始在各社交媒體類網(wǎng)站中采集不同關(guān)鍵詞相關(guān)信息花費(fèi)時(shí)間未知時(shí),認(rèn)為各關(guān)鍵詞相關(guān)信息的采集時(shí)間相同,則各關(guān)鍵詞的初始權(quán)重為本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的調(diào)度方法,步驟c)中所述的各爬取節(jié)點(diǎn)生成初始采集目標(biāo)數(shù)據(jù)源url列表具體通過以下步驟來實(shí)現(xiàn):c-1).爬取節(jié)點(diǎn)從vpn連接列表中選擇最久未使用的vpn連接連入遠(yuǎn)程vpn代理服務(wù)器,使用vpn代理服務(wù)器訪問新聞類網(wǎng)站和社交媒體類網(wǎng)站,獲取初始采集目標(biāo)數(shù)據(jù)源列表,同時(shí)記錄使用該vpn連接的開始使用時(shí)間;并通過y/n記錄vpn連接最近是否使用過,若最近使用過該vpn連接標(biāo)識為y,反之標(biāo)識為n;c-2).爬取節(jié)點(diǎn)首先解析采集任務(wù)的新聞類網(wǎng)站和社交媒體類網(wǎng)站的主機(jī)地址,然后將自身的任務(wù)主機(jī)地址與暫時(shí)停用目標(biāo)主機(jī)列表host_disable_list進(jìn)行比對,去除出現(xiàn)在host_disable_list中且停用時(shí)間小于2小時(shí)的任務(wù)主機(jī),并刪除host_disable_list中停用時(shí)間大于2小時(shí)的主機(jī)地址;c-3).假設(shè)比對host_disable_list之后保留的新聞類網(wǎng)站為webj,webj+1,…,webk,其對應(yīng)的采集入口url地址分別是爬取節(jié)點(diǎn)spideri分別以為接入口獲取相應(yīng)網(wǎng)站中網(wǎng)頁url地址列表比對host_disable_list之后保留的社交媒體類網(wǎng)站對應(yīng)的檢索入口url地址分別是各社交媒體分配到spideri的關(guān)鍵詞為則爬取節(jié)點(diǎn)spideri分別以各社交媒體的檢索地址為接入口結(jié)合社交媒體所對應(yīng)的關(guān)鍵詞獲取各社交媒體網(wǎng)頁url地址列表初始采集目標(biāo)數(shù)據(jù)源列表url_init_list由url_init_listweb和url_init_listsoc組成,即url_init_list=url_init_listweb∪url_init_listsoc。本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的調(diào)度方法,步驟d)中各爬取節(jié)點(diǎn)確定最終采集目標(biāo)數(shù)據(jù)源url列表具體通過以下步驟來實(shí)現(xiàn):d-1).爬取節(jié)點(diǎn)首先將url_init_list與url索引服務(wù)器所維護(hù)的url_list列表進(jìn)行比對,查看url_init_list中的每條url地址是否采集過,若未采集則將此條url放入中間采集目標(biāo)數(shù)據(jù)源列表url_intermed_list,并在url_intermed_list中記錄此url為新增地址,否則執(zhí)行步驟d-2);d-2).若url_init_list中某條url地址已存在于url列表,說明已經(jīng)采集過此url地址中的數(shù)據(jù),然而新聞類網(wǎng)站和社交媒體類網(wǎng)站的數(shù)據(jù)不斷更新,在網(wǎng)頁活躍期內(nèi)仍需持續(xù)采集更新數(shù)據(jù);因此,當(dāng)url_init_list中某條url地址已存在于url_list中,則首先判斷該url地址的網(wǎng)頁類型,將當(dāng)前時(shí)間與該url地址的初次訪問時(shí)間對比,若兩者的時(shí)間差小于相應(yīng)網(wǎng)頁的重訪時(shí)間標(biāo)準(zhǔn),則將此url地址放入url_intermed_list,否則不再采集該url地址數(shù)據(jù)。d-3).首先將url_intermed_list中的url地址按照主機(jī)分組劃分成若干子列表,然后采用隨機(jī)方法隨機(jī)挑選一個子列表,并在該子列表中隨機(jī)選擇一個未被選中過的url地址放入url_final_list,迭代子列表和url地址的選擇過程直至選完所有子列表的所有url地址。本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的調(diào)度方法,步驟e)中所述的各爬取節(jié)點(diǎn)采集目標(biāo)數(shù)據(jù)源列表的網(wǎng)頁數(shù)據(jù)通過以下步驟來實(shí)現(xiàn):e-1).爬取節(jié)點(diǎn)從自身的url_final_list中取出一條url地址,通過當(dāng)前vpn連路采集url地址所指向的網(wǎng)頁數(shù)據(jù),若返回結(jié)果為網(wǎng)頁數(shù)據(jù),則執(zhí)行步驟e-2);若返回結(jié)果為服務(wù)器拒絕訪問或其他vpn相關(guān)錯誤,則執(zhí)行步驟e-3);e-2).緩存采集結(jié)果,存放到混排的結(jié)果列表data_init_list中,并記錄網(wǎng)頁的類型、網(wǎng)頁的來源、社交媒體類網(wǎng)頁所對應(yīng)的檢索關(guān)鍵詞、網(wǎng)頁采集花費(fèi)的時(shí)間;所采集的url地址被標(biāo)識為新增地址時(shí),則向url索引服務(wù)器發(fā)送url_list更新請求;e-3).若爬取節(jié)點(diǎn)中有標(biāo)識為最近未使用過的vpn連接,則在標(biāo)識為最近未使用過的vpn連接中,通過當(dāng)前時(shí)間與最近未使用過的vpn連接的開始使用時(shí)間對比,選擇一個最久未使用vpn連接,在連接成功后,執(zhí)行步驟e-4);若爬取節(jié)點(diǎn)的vpn連接全部標(biāo)識為最近使用過,執(zhí)行步驟e-5);e-4).使用新的vpn連接采集網(wǎng)頁數(shù)據(jù),若返回結(jié)果為網(wǎng)頁數(shù)據(jù),則執(zhí)行步驟e-2);若仍出現(xiàn)服務(wù)器拒絕訪問或其他vpn相關(guān)錯誤,則執(zhí)行步驟e-3);e-5).爬取節(jié)點(diǎn)向爬取主控節(jié)點(diǎn)申請新的vpn連接,若成功申請到新的vpn連接則將此vpn加入vpn連接列表,并將申請到的vpn連接標(biāo)識為最近未使用,執(zhí)行步驟e-3);若未申請到vpn連接執(zhí)行步驟e-6);e-6).刪除url_final_list中與此url主機(jī)地址相同的未采集url,執(zhí)行步驟e-1)。本發(fā)明的基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的調(diào)度方法,對社交媒體類網(wǎng)站的大規(guī)模采集對外網(wǎng)ip地址的要求遠(yuǎn)高于新聞類網(wǎng)站的采集,因此本發(fā)明所需的vpn個數(shù)主要受限于社交媒體類網(wǎng)站的關(guān)鍵詞,通過如下公式估算:其中vpns表示所需vpn連接數(shù),nsearchpage表示檢索結(jié)果頁鏈接個數(shù),nvpn_ip表示社交媒體類網(wǎng)站允許一個ip地址采集的頁數(shù);所需爬取節(jié)點(diǎn)的個數(shù)通過如下公式估算:其中clients表示需要爬取節(jié)點(diǎn)的個數(shù),expecttime表示完成一輪采集所花費(fèi)的期望時(shí)間,accesstime表示連接遠(yuǎn)程服務(wù)器及采集數(shù)據(jù)時(shí)間,vpnlinktime表示vpn單次連接時(shí)間。本發(fā)明的有益效果是:首先,單一域網(wǎng)絡(luò)爬蟲共享同一ip出口地址,訪問的頻率和總量將受到限制,本發(fā)明中的爬取節(jié)點(diǎn)通過vpn撥號的方式連入遠(yuǎn)程vpn代理服務(wù)器,進(jìn)而使用代理服務(wù)器的公網(wǎng)ip地址訪問數(shù)據(jù)源,通過切換vpn連接獲取不同公網(wǎng)ip,解決局域網(wǎng)爬蟲ip地址單一問題;其次,雖然通過連入遠(yuǎn)程vpn代理服務(wù)器的方式可獲得多個公網(wǎng)ip地址,但就社交新聞類網(wǎng)站的更新頻率而言,ip地址仍是珍貴的稀缺資源,為使用一個ip地址盡可能多的獲取數(shù)據(jù),本發(fā)明采用多目標(biāo)數(shù)據(jù)源url穿插采集的方式,避免同一時(shí)間過于密集地采集單一目標(biāo)服務(wù)器中的數(shù)據(jù),從而造成服務(wù)器拒絕訪問問題,解決社交媒體類網(wǎng)站平臺數(shù)據(jù)采集覆蓋性和完整性;最后,與當(dāng)前負(fù)載均衡通過分配網(wǎng)絡(luò)連接方式不同,本發(fā)明采用調(diào)整關(guān)鍵詞的方式均衡各爬取節(jié)點(diǎn)的負(fù)載。附圖說明圖1為本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的部署結(jié)構(gòu);圖2為本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的數(shù)據(jù)抓取步驟;圖3為本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系爬取中控節(jié)點(diǎn)生成的采集目標(biāo)數(shù)據(jù)源列表;圖4為本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)爬取中控節(jié)點(diǎn)生成url_final_list的流程圖。具體實(shí)施方式下面結(jié)合附圖與實(shí)施例對本發(fā)明作進(jìn)一步說明。為解決大多數(shù)組織在訪問internet時(shí)ip地址單一,從而導(dǎo)致社交網(wǎng)站數(shù)據(jù)爬取不完整和覆蓋差問題,本發(fā)明提出了一種基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)。如圖1所示,給出了為本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的部署結(jié)構(gòu),本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)部署于組織局域網(wǎng)內(nèi),通過路由器接入運(yùn)營商的方式訪問internet?;趘pn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)由爬取設(shè)置客戶端、爬取主控節(jié)點(diǎn)、爬取節(jié)點(diǎn)、url索引服務(wù)器、數(shù)據(jù)中心以及最終用戶組成。爬取設(shè)置客戶端用于配置數(shù)據(jù)源、關(guān)鍵詞、爬取策略等;爬取主控節(jié)點(diǎn)根據(jù)爬取設(shè)置客戶端的配置為多個爬取節(jié)點(diǎn)分配任務(wù),負(fù)責(zé)爬取節(jié)點(diǎn)的調(diào)度并均衡各爬取節(jié)點(diǎn)的負(fù)載;爬取節(jié)點(diǎn)中部署著網(wǎng)絡(luò)爬蟲系統(tǒng),在接到爬取主控節(jié)點(diǎn)分配的采集任務(wù)后選擇一個vpn連接連入遠(yuǎn)程vpn代理服務(wù)器,使用代理服務(wù)器訪問internet中的目標(biāo)數(shù)據(jù)源服務(wù)器;url索引服務(wù)器記錄已爬取過的url及爬取時(shí)間;數(shù)據(jù)中心用于存儲抓取的網(wǎng)頁數(shù)據(jù);用戶是網(wǎng)絡(luò)數(shù)據(jù)的使用者,可通過多種方式與數(shù)據(jù)中心交互?;趘pn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)中的各設(shè)備均為邏輯劃分,并非每個設(shè)備均需一個物理設(shè)備與其對應(yīng)。其中爬取設(shè)置客戶端可以是任意具有爬取設(shè)置權(quán)限的用戶;在設(shè)備性能富有余地的情況下,url索引服務(wù)器也可合并到數(shù)據(jù)中心,由數(shù)據(jù)中心承擔(dān)已爬取url的記錄功能。如圖2所示給出了本發(fā)明基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)的數(shù)據(jù)抓取步驟,將基于vpn的分布式網(wǎng)絡(luò)爬蟲系統(tǒng)部署到組織內(nèi)往后,所采用的數(shù)據(jù)抓取方法步驟如圖2所示。步驟一:確定新聞類網(wǎng)站和社交媒體類網(wǎng)站平臺的數(shù)據(jù)采集方法;步驟二:爬取主控節(jié)點(diǎn)為各爬取節(jié)點(diǎn)分配任務(wù);步驟三:各爬取節(jié)點(diǎn)生成初始采集目標(biāo)數(shù)據(jù)源url列表;步驟四:各爬取節(jié)點(diǎn)確定采集目標(biāo)數(shù)據(jù)源url列表;步驟五:各爬取節(jié)點(diǎn)采集目標(biāo)數(shù)據(jù)源列表的網(wǎng)頁數(shù)據(jù)步驟六:url索引服務(wù)器維護(hù)更新url列表;步驟七:各爬取節(jié)點(diǎn)將爬取結(jié)果存儲到數(shù)據(jù)中心;步驟八:各爬取節(jié)點(diǎn)向爬取主控節(jié)點(diǎn)匯報(bào)狀態(tài);步驟九:爬取主控狀態(tài)根據(jù)所匯報(bào)的狀態(tài)調(diào)節(jié)負(fù)載。步驟一,新聞類網(wǎng)站和社交媒體類網(wǎng)站平臺的數(shù)據(jù)采集方法確定如下:組織關(guān)注的數(shù)據(jù)源既有指導(dǎo)行業(yè)發(fā)展走向的政策類網(wǎng)站,也有介紹相關(guān)領(lǐng)域最新科技動態(tài)及競爭對手產(chǎn)品信息的新聞類網(wǎng)站,以及反應(yīng)用戶對產(chǎn)品評價(jià)的博客、論壇、微博等社交網(wǎng)站。其中政策類網(wǎng)站和新聞類網(wǎng)站的信息一般是由網(wǎng)站編輯工作人員撰寫錄入,單個網(wǎng)站信息更新頻率和數(shù)量較低,其日更新量一般不超過千條。而論壇、微博等社交媒體平臺的信息由活躍于互聯(lián)網(wǎng)和移動網(wǎng)的網(wǎng)民自由撰寫發(fā)表,單個媒體平臺信息更新頻率和數(shù)量極高,日更新量超過億條,任何第三方爬蟲系統(tǒng)都難以應(yīng)對如此量級的數(shù)據(jù)采集。所幸組織所關(guān)注的重點(diǎn)是業(yè)務(wù)領(lǐng)域相關(guān)信息,這些信息只是各類數(shù)據(jù)源提供數(shù)據(jù)的子集。組織通常可采用構(gòu)建本體知識庫的方式,描述業(yè)務(wù)領(lǐng)域過濾無效信息。為保證業(yè)務(wù)領(lǐng)域描述的完整性,構(gòu)建的本體知識庫一般包含幾百個概念和實(shí)例(關(guān)鍵詞)。在明確目標(biāo)數(shù)據(jù)源和關(guān)鍵詞的基礎(chǔ)上,組織獲取有效信息的方法有兩種。其一,使用爬蟲直接抓取目標(biāo)源數(shù)據(jù),再使用關(guān)鍵詞進(jìn)行數(shù)據(jù)過濾;其二,利用目標(biāo)數(shù)據(jù)源的站內(nèi)檢索結(jié)合關(guān)鍵詞獲取有效信息,再使用爬蟲抓取檢索結(jié)果。假設(shè)本體知識庫中的關(guān)鍵詞數(shù)為nkw,目標(biāo)數(shù)據(jù)源中單位時(shí)間內(nèi)信息的更新量為nd,受限于新聞類網(wǎng)站頁面承載的信息量,nd將分布于新聞類網(wǎng)站的多個頁面,一個頁面承載的信息數(shù)為c。在新聞類網(wǎng)站信息總更新量nd中,與組織業(yè)務(wù)領(lǐng)域相關(guān)的有效信息量為ni。兩種采集方法與服務(wù)器的交互次數(shù)可分成兩部分,分別是為得到有效信息所在的位置訪問頁面的次數(shù)(訪問目錄頁次數(shù))和抓取信息的次數(shù)(訪問內(nèi)容頁次數(shù))。若ni均勻的分布于nd中,則采用第一種方法獲取全部ni條有效信息需訪問目標(biāo)數(shù)據(jù)源次,采用第二種方法獲取全部ni條有效信息需訪問目標(biāo)數(shù)據(jù)源次。面對日信息更新量過億的社交媒體類網(wǎng)站平臺,則nd>>c,nd>>ni且nd>>nkw,采用第一種方法訪問目標(biāo)數(shù)據(jù)源的次數(shù)遠(yuǎn)大于第二種方法,顯然對于信息更新頻率極高的社交媒體類網(wǎng)站平臺更適合于采用第二種方法而非第一種方法。而面對日信息更新量少于千條的新聞類網(wǎng)站數(shù)據(jù)nd并不會比ni大一個數(shù)量級,且若新聞類網(wǎng)站是組織挑選的行業(yè)內(nèi)新聞類網(wǎng)站則nd≈ni,此時(shí)影響兩種方法訪問服務(wù)器次數(shù)的關(guān)鍵在于nkw。顯然對于信息更新頻率較低的新聞類網(wǎng)站,采用第一種方法采集數(shù)據(jù),而后在本地使用關(guān)鍵詞過濾信息的方式,可有效減少與服務(wù)器的交互次數(shù),增強(qiáng)ip地址利用率。因此本發(fā)明采用第一種方法采集新聞類網(wǎng)站數(shù)據(jù),而采用第二種方法采集社交媒體類網(wǎng)站數(shù)據(jù)。步驟二,在明確新聞類網(wǎng)站和社交媒體類網(wǎng)站平臺的采集方法后,爬取主控節(jié)點(diǎn)為各爬取節(jié)點(diǎn)分配任務(wù)的方案如下:當(dāng)前種子連接分配策略一般是以域名(主機(jī))為單位,將同一域名的數(shù)據(jù)交由一個爬取節(jié)點(diǎn)采集。本發(fā)明也采用此種策略采集新聞類網(wǎng)站數(shù)據(jù),將同一域名的新聞類網(wǎng)站分配給一個爬取節(jié)點(diǎn)采集。如前所述采集社交媒體類網(wǎng)站平臺,訪問目標(biāo)服務(wù)器的次中,nkw次訪問并未采集信息,而是關(guān)鍵詞檢索引起的開銷。受同一ip地址訪問總量限制以及關(guān)鍵詞的演進(jìn)和變化,若仍將同一域名的社交媒體類網(wǎng)站也交由一個爬取節(jié)點(diǎn)采集,關(guān)鍵詞的檢索會造成極大的浪費(fèi)有限的訪問總量。針對社交媒體類網(wǎng)站數(shù)據(jù)采集,本發(fā)明將同一域名的社交媒體類網(wǎng)站分配到全部爬取節(jié)點(diǎn),并為每個爬取節(jié)點(diǎn)分配互不相同的關(guān)鍵詞。假設(shè)爬取節(jié)點(diǎn)數(shù)為ncl,不同域名新聞類網(wǎng)站數(shù)為nweb,不同域名社交媒體類網(wǎng)站數(shù)為nsoc,社交媒體類網(wǎng)站的關(guān)鍵詞為nkw。在初始各爬取節(jié)點(diǎn)狀態(tài)未知時(shí),爬取主控節(jié)點(diǎn)的種子連接分配策略為:將域名不同的新聞類網(wǎng)站平均分配到各爬取節(jié)點(diǎn),也即隨機(jī)為每個爬取節(jié)點(diǎn)分配個不同域名新聞類網(wǎng)站;而將域名不同的社交媒體類網(wǎng)站分配到所有爬取節(jié)點(diǎn),將不同關(guān)鍵詞平均分配到各爬取節(jié)點(diǎn),也即為每個爬取節(jié)點(diǎn)分配nsoc個不同域名社交媒體類網(wǎng)站,并隨機(jī)分配個不同的關(guān)鍵詞。爬取主控節(jié)點(diǎn)維護(hù)著爬取節(jié)點(diǎn)任務(wù)分配表、爬取節(jié)點(diǎn)心跳表和vpn連接賬戶表。如表1所示,給出了新聞類網(wǎng)站爬取任務(wù)分配表:表1表1記錄各個爬取節(jié)點(diǎn)所分配到的新聞類網(wǎng)站以及各個新聞類網(wǎng)站的權(quán)重,新聞類網(wǎng)站webi的權(quán)重計(jì)算公式為:其中為抓取新聞類網(wǎng)站webj所花費(fèi)的時(shí)間j∈[1,nweb],初始采集各新聞類網(wǎng)站花費(fèi)時(shí)間未知時(shí),認(rèn)為所有新聞類網(wǎng)站采集時(shí)間相同,則各新聞類網(wǎng)站的初始權(quán)重為表2給出了社交媒體類網(wǎng)站爬取任務(wù)分配表:表2表2的右續(xù)表:表2記錄各個爬取節(jié)點(diǎn)在每個社交媒體類網(wǎng)站中所分配到的關(guān)鍵詞,以及不同社交媒體類網(wǎng)站不同關(guān)鍵詞的權(quán)重,社交媒體類網(wǎng)站soci中關(guān)鍵詞kwj的權(quán)重計(jì)算公式為:其中為在社交媒體類網(wǎng)站soci中采集關(guān)鍵詞kwk相關(guān)的信息所花費(fèi)的時(shí)間k∈[1,nsoc],初始在各社交媒體類網(wǎng)站中采集不同關(guān)鍵詞相關(guān)信息花費(fèi)時(shí)間未知時(shí),認(rèn)為各關(guān)鍵詞相關(guān)信息的采集時(shí)間相同,則各關(guān)鍵詞的初始權(quán)重為表3crawlerstatespider1***spider2***spider3***…………spiderncl***如表3所示,給出了爬取節(jié)點(diǎn)心跳表,爬取主控節(jié)點(diǎn)定時(shí)接收各個爬取節(jié)點(diǎn)的心跳狀態(tài),并記錄在爬取節(jié)點(diǎn)心跳表中,從而了解爬取節(jié)點(diǎn)是否宕機(jī)以及是否有新的爬取節(jié)點(diǎn)加入,心跳表中的state記錄著各個爬取節(jié)點(diǎn)向爬取主控節(jié)點(diǎn)最后返回心跳時(shí)間。當(dāng)有節(jié)點(diǎn)宕機(jī)或新節(jié)點(diǎn)加入時(shí),根據(jù)各個新聞類網(wǎng)站爬取時(shí)間、各個社交媒體類網(wǎng)站不同關(guān)鍵詞相關(guān)信息爬取所花費(fèi)的時(shí)間,以及所擁有的爬取節(jié)點(diǎn)數(shù)依據(jù)負(fù)載均衡原則重新分配任務(wù)。爬取主控節(jié)點(diǎn)在給爬取節(jié)點(diǎn)分配任務(wù)的同時(shí)為其分配一個vpn連接列表,初始時(shí)爬取主控節(jié)點(diǎn)所分配的vpn連接列表包含兩個ip地址不同vpn連接。在信息采集過程中,當(dāng)所分配的ip地址達(dá)到采集上限時(shí),爬取節(jié)點(diǎn)將向主控節(jié)點(diǎn)申請新的vpn連接,若存在未分配vpn連接則主控節(jié)點(diǎn)將為爬取節(jié)點(diǎn)再分配一個連接。如表4所示,給出了爬取中控節(jié)點(diǎn)的vpn連接賬戶表:表4vpnconnectionipaddressuserpasswordassignmentvpn1*********spider3vpn2*********nonevpn3*********spider1vpn4*********spiderncl…………………………vpnw*********spider2爬取主控節(jié)點(diǎn)在vpn連接賬戶表中記錄著系統(tǒng)所擁有的vpn賬號及各賬號的分配情況,如表4所示,其中assignment記錄著vpn連接賬戶的分配情況。步驟三,各爬取節(jié)點(diǎn)在分配到vpn連接列表、新聞類網(wǎng)站采集入口url地址、社交媒體類網(wǎng)站搜索入口url地址以及關(guān)鍵詞后,生成初始采集目標(biāo)數(shù)據(jù)源列表方案如下:爬取節(jié)點(diǎn)中部署著網(wǎng)絡(luò)爬蟲系統(tǒng),在接到爬取主控節(jié)點(diǎn)分配的采集任務(wù)以及vpn連接列表后,從vpn連接列表中選擇一個最近未使用且最久未使用的vpn連接連入遠(yuǎn)程vpn代理服務(wù)器,使用代理服務(wù)器訪問internet中新聞類網(wǎng)站和社交媒體類網(wǎng)站,獲取初始采集目標(biāo)數(shù)據(jù)源列表,同時(shí)記錄使用該vpn連接的起始時(shí)間。如表5所示,給出了爬取節(jié)點(diǎn)的vpn列表:表5爬取節(jié)點(diǎn)所維護(hù)的vpn列表如表5所示,starttime記錄vpn連接的開始使用時(shí)間,recentlyused通過y/n記錄vpn連接最近是否使用過,若最近使用過該vpn連接則標(biāo)識為y,反之標(biāo)識為n。暫時(shí)停用目標(biāo)主機(jī)列表host_disable_list記錄著暫時(shí)不采集的主機(jī)地址及起始停用時(shí)間。在采集任務(wù)開始之前,爬取節(jié)點(diǎn)spideri將首先解析采集任務(wù)的新聞類網(wǎng)站及社交媒體類網(wǎng)站的主機(jī)地址。然后將任務(wù)主機(jī)地址與host_disable_list進(jìn)行對比,去除出現(xiàn)在host_disable_list中且停用時(shí)間小于2小時(shí)的任務(wù)主機(jī),并刪除host_disable_list中停用時(shí)間大于2小時(shí)的主機(jī)地址。假設(shè)比對host_disable_list之后保留的新聞類網(wǎng)站為webj,webj+1,…,webk,其對應(yīng)的采集入口url地址分別是爬取節(jié)點(diǎn)spideri分別以為接入口獲取相應(yīng)新聞類網(wǎng)站中網(wǎng)頁url地址列表比對host_disable_list之后保留的社交媒體類網(wǎng)站對應(yīng)的檢索入口url地址分別是各社交媒體類網(wǎng)站分配到spideri的關(guān)鍵詞為則爬取節(jié)點(diǎn)spideri分別以各社交媒體類網(wǎng)站的檢索地址為接入口結(jié)合社交媒體類網(wǎng)站所對應(yīng)的關(guān)鍵詞獲取各社交媒體類網(wǎng)站網(wǎng)頁url地址列表初始采集目標(biāo)數(shù)據(jù)源列表url_init_list由url_init_listweb和url_init_listsoc組成,也即url_init_list=url_init_listweb∪url_init_listsoc。步驟四,各爬取節(jié)點(diǎn)在得到初始采集目標(biāo)數(shù)據(jù)源列表后,確定采集目標(biāo)數(shù)據(jù)源列表包含如下三個階段:階段一:比對url采集列表url索引服務(wù)器所維護(hù)的url列表(url_list)記錄著所有已爬取過的網(wǎng)頁url及爬取時(shí)間,如表6所示,給出了爬取中控節(jié)點(diǎn)的url列表:表6urlaccesstimeweborsochttp://…***web_comhttp://…***sochttps://…***web_edu………………h(huán)ttps://…***soc其中,accesstime記錄網(wǎng)頁的初次訪問時(shí)間,weborsoc用于區(qū)分網(wǎng)頁是來自于社交媒體類網(wǎng)站還是新聞類網(wǎng)站,同時(shí)根據(jù)新聞類網(wǎng)站后綴不同又將新聞類網(wǎng)站網(wǎng)頁分為com、net、edu、gov四種類型。爬取節(jié)點(diǎn)首先將url_init_list與url_list進(jìn)行比對,查看url_init_list中的每條url地址是否采集過,若未采集則將此條url放入中間采集目標(biāo)數(shù)據(jù)源列表url_intermed_list,并在url_intermed_list中記錄此url為新增地址,否則轉(zhuǎn)入階段二;階段二:比對url采集時(shí)間若url_init_list中某條url地址已存在于url列表,說明已經(jīng)采集過此url地址中的數(shù)據(jù),然而新聞類網(wǎng)站和社交媒體類網(wǎng)站的數(shù)據(jù)不斷更新,在網(wǎng)頁活躍期內(nèi)仍需持續(xù)采集更新數(shù)據(jù)。斯坦福大學(xué)的cho和garcia-monlina指出網(wǎng)頁更新時(shí)間間隔符合指數(shù)分布,不同類型網(wǎng)頁更新頻率不同。本發(fā)明分別統(tǒng)計(jì)社交媒體類網(wǎng)站網(wǎng)頁、com網(wǎng)站網(wǎng)頁、net網(wǎng)站網(wǎng)頁、edu網(wǎng)站網(wǎng)頁和gov網(wǎng)站網(wǎng)頁的平均更新時(shí)間作為重訪時(shí)間標(biāo)準(zhǔn)。因此,當(dāng)url_init_list中某條url地址已存在于url_list中,則首先判斷該url地址的網(wǎng)頁類型,將當(dāng)前時(shí)間與該url地址的初次訪問時(shí)間對比,若兩者的時(shí)間差小于相應(yīng)網(wǎng)頁的重訪時(shí)間標(biāo)準(zhǔn),則將此url地址放入url_intermed_list,否則不再采集該url地址數(shù)據(jù)。階段三:混排中間采集目標(biāo)數(shù)據(jù)源列表有限的外網(wǎng)ip地址在大規(guī)模信息采集中是極其珍貴的資源,在一定時(shí)間內(nèi)無節(jié)制頻繁地訪問同一新聞類網(wǎng)站或社交媒體類網(wǎng)站,會受到目標(biāo)數(shù)據(jù)服務(wù)器的拒絕,這將成為影響信息采集的制約因素。為充分使用有限的外網(wǎng)ip地址,與其他爬蟲系統(tǒng)不同,本發(fā)明避免集中采集同一新聞類網(wǎng)站或社交媒體類網(wǎng)站url地址,將url_intermed_list中的url地址進(jìn)行混排生成最終采集目標(biāo)數(shù)據(jù)源列表url_final_list。如圖3所示,給出了中控節(jié)點(diǎn)生成的采集目標(biāo)數(shù)據(jù)源列表,圖4給出了本發(fā)明中爬取中控節(jié)點(diǎn)生成url_final_list的流程圖,首先將url_intermed_list中的url地址按照主機(jī)分組劃分成若干子列表,然后采用隨機(jī)方法隨機(jī)挑選一個子列表,并在該子列表中隨機(jī)選擇一個未被選中過的url地址放入url_final_list,迭代子列表和url地址的選擇過程直至選完所有子列表的所有url地址。此外,為避免同一新聞類網(wǎng)站或社交媒體類網(wǎng)站的多次域名尋址節(jié)省帶寬,爬取節(jié)點(diǎn)可在一次訪問后記錄新聞類網(wǎng)站和社交媒體類網(wǎng)站的ip地址。在url_intermed_list中被標(biāo)識為新增地址的url在混排到url_final_list時(shí),同樣被標(biāo)識為新增地址。本發(fā)明采用url+標(biāo)識在url_intermed_list與url_list對比中未出現(xiàn)在url_list中的url地址,也即之前未采集過的網(wǎng)頁url地址。步驟五,爬取節(jié)點(diǎn)在得到采集目標(biāo)數(shù)據(jù)源列表后,采集網(wǎng)頁數(shù)據(jù)包含如下兩個階段:階段一:采集url_final_list中各url所指向網(wǎng)頁數(shù)據(jù)1、從url_final_list中取出一條url地址。2、通過當(dāng)前vpn鏈路采集url地址所指向的網(wǎng)頁數(shù)據(jù)。3、監(jiān)測返回結(jié)果,3-1若返回結(jié)果為網(wǎng)頁數(shù)據(jù),3-1-1統(tǒng)計(jì)當(dāng)前網(wǎng)頁采集花費(fèi)時(shí)間,并緩存采集結(jié)果,存放到混排的結(jié)果列表data_init_list中,表7給出了混排的結(jié)果列表,其中weborsoc記錄網(wǎng)頁的類型,用于區(qū)分該網(wǎng)頁是新聞類網(wǎng)站類網(wǎng)頁還是社交媒體類網(wǎng)站類網(wǎng)頁;host記錄網(wǎng)頁的來源新聞類網(wǎng)站或來源社交媒體類網(wǎng)站;keyword記錄社交媒體類網(wǎng)站類網(wǎng)頁所對應(yīng)的檢索關(guān)鍵詞,新聞類網(wǎng)站類網(wǎng)頁則為空值none;cost記錄網(wǎng)頁采集花費(fèi)的時(shí)間;page存儲網(wǎng)頁的具體內(nèi)容。表7urlweborsochostkeywordcostpageurl1web***none******url2soc************url3web***none******………………………………urlnsoc************3-1-2若所采集的url地址被標(biāo)識為新增地址時(shí),則向url索引服務(wù)器發(fā)送url_list更新請求。3-2若返回結(jié)果為服務(wù)器拒絕訪問或其他vpn相關(guān)錯誤,3-2-1若vpn列表的recentlyused有標(biāo)識為n的vpn連接,則在標(biāo)識為n的vpn連接中,通過當(dāng)前時(shí)間與vpn列表中的starttime對比,選擇一個最久未使用vpn連接,在連接成功后將starttime記錄為當(dāng)前時(shí)間,標(biāo)識該vpn連接的recentlyused為y,轉(zhuǎn)入3-2-2;若vpn列表的recentlyused全部標(biāo)識為y,則轉(zhuǎn)入3-2-3。3-2-2使用新的vpn連接采集網(wǎng)頁數(shù)據(jù),若返回結(jié)果為網(wǎng)頁數(shù)據(jù),則將vpn列表中除此vpn連接的其他recentlyused標(biāo)識為n,轉(zhuǎn)入3-1;若仍出現(xiàn)相同錯誤,轉(zhuǎn)入3-2-1。3-2-3爬取節(jié)點(diǎn)向爬取主控節(jié)點(diǎn)申請新的vpn連接,若成功申請到新的vpn連接則將此vpn加入vpn連接列表,并將recentlyused標(biāo)識為n,轉(zhuǎn)入3-2-1;若未申請到vpn連接,則轉(zhuǎn)入3-2-4。3-2-4將該url主機(jī)地址及當(dāng)前時(shí)間記錄到host_disable_list,刪除url_final_list中與此url主機(jī)地址相同的未采集url,并將vpn列表中除此vpn連接的其他recentlyused標(biāo)識為n,轉(zhuǎn)入1。4、迭代本階段中的步驟1至步驟3直至url_final_list為空。階段二:計(jì)算新聞類網(wǎng)站及社交媒體類網(wǎng)站權(quán)重,將采集結(jié)果發(fā)送到數(shù)據(jù)中心1、在完成本輪url_final_list的采集后,重新分組data_init_list,1-1對于新聞類網(wǎng)頁按照網(wǎng)站分組,存放到新聞類網(wǎng)站結(jié)果列表data_final_listweb。1-2對于社交媒體類類網(wǎng)頁按照社交媒體類網(wǎng)站分組后,再按照網(wǎng)頁所對應(yīng)關(guān)鍵詞進(jìn)行分組,存放到社交媒體類網(wǎng)站結(jié)果列表data_final_listsoc。2、計(jì)算新聞類網(wǎng)站采集時(shí)間和社交媒體類網(wǎng)站各關(guān)鍵詞相關(guān)信息采集時(shí)間,記錄到爬取節(jié)點(diǎn)采集時(shí)間表,其邏輯結(jié)構(gòu)如表8和表9所示:表8webcostroundwebj******webj+1******………………webk******表9表8給出了爬取節(jié)點(diǎn)記錄的新聞類網(wǎng)站的采集時(shí)間表,表9給出了所記錄的社交媒體類網(wǎng)站的采集時(shí)間表,其中cost記錄各新聞類網(wǎng)站和社交媒體類網(wǎng)站的各關(guān)鍵詞采集所花費(fèi)的時(shí)間,round記錄本輪url_final_list采集完成時(shí)間。2-1匯總data_final_listweb中同一新聞類網(wǎng)站所有網(wǎng)頁的采集時(shí)間,記錄到新聞類網(wǎng)站采集時(shí)間表,如表8所示。2-2匯總中同一社交媒體類網(wǎng)站同一關(guān)鍵詞所有網(wǎng)站的采集時(shí)間,記錄到社交媒體類網(wǎng)站采集時(shí)間表,如表9所示。3、將data_final_listweb和data_final_listsoc打包,發(fā)送給數(shù)據(jù)中心,轉(zhuǎn)入步驟三。步驟六,url索引服務(wù)器維護(hù)更新url列表url索引服務(wù)器在接收到爬取節(jié)點(diǎn)發(fā)送的url_list更新請求后,將url地址添加到url_list中,并將訪問時(shí)間設(shè)置為當(dāng)前時(shí)間。為提高檢索速度,url_list可采用倒排索引機(jī)制。步驟七,各爬取節(jié)點(diǎn)向數(shù)據(jù)中心發(fā)送爬取結(jié)果各爬取節(jié)點(diǎn)逐一采集各自目標(biāo)數(shù)據(jù)源列表中每條url數(shù)據(jù)源,將采集結(jié)果緩存至本地,在完成任務(wù)列表中所有數(shù)據(jù)源的采集后,按照批處理的方式將采集到的數(shù)據(jù)一次性發(fā)送到數(shù)據(jù)中心。數(shù)據(jù)中心將統(tǒng)一負(fù)責(zé)接收并按照規(guī)定的存儲格式,對采集結(jié)果進(jìn)行解析存儲。步驟八,各爬取節(jié)點(diǎn)向爬取主控節(jié)點(diǎn)匯報(bào)以下兩種狀態(tài):1、心跳狀態(tài)各爬取節(jié)點(diǎn)按照約定時(shí)間,定時(shí)向爬取主控節(jié)點(diǎn)發(fā)送心跳信號,以表明爬取節(jié)點(diǎn)仍處于活動狀態(tài)。爬取主控節(jié)點(diǎn)若在約定時(shí)間內(nèi)未收到爬取節(jié)點(diǎn)的心跳信號,則認(rèn)為爬取節(jié)點(diǎn)宕機(jī),反之則認(rèn)為爬取節(jié)點(diǎn)工作正常。當(dāng)爬取主控節(jié)點(diǎn)收到新的心跳信號時(shí)則認(rèn)為有新的爬取節(jié)點(diǎn)加入。2、信息采集情況各爬取節(jié)點(diǎn)按照約定時(shí)間,定時(shí)將各自的采集時(shí)間表發(fā)送到爬取主控節(jié)點(diǎn),發(fā)送成功后清空本地表。步驟九,爬取主控節(jié)點(diǎn)調(diào)節(jié)各爬取節(jié)點(diǎn)負(fù)載的方案如下:該步驟中所述的爬取主控節(jié)點(diǎn)根據(jù)所匯報(bào)的狀態(tài)調(diào)節(jié)負(fù)載具體通過以下步驟來實(shí)現(xiàn):i-1).獲取采集時(shí)間表,各爬取節(jié)點(diǎn)定時(shí)將所記錄的新聞類網(wǎng)站的采集時(shí)間表和社交媒體類網(wǎng)站的采集時(shí)間表發(fā)送至爬取主控節(jié)點(diǎn),爬取主控節(jié)點(diǎn)將其存儲至本地的信息采集匯總時(shí)間表中;新聞類網(wǎng)站的采集時(shí)間表由各新聞類網(wǎng)站及采集網(wǎng)站所花費(fèi)的時(shí)間cost、采集網(wǎng)站的完成時(shí)間round組成;執(zhí)行步驟i-2);i-2).計(jì)算平均訪問時(shí)間和權(quán)重,爬取主控節(jié)點(diǎn)以天為單位,在一天結(jié)束時(shí)分析當(dāng)天的信息采集匯總時(shí)間表,按新聞類網(wǎng)站匯總當(dāng)天多輪采集時(shí)間,計(jì)算當(dāng)天每個新聞類網(wǎng)站的一輪抓取所需平均訪問時(shí)間,按社交媒體類網(wǎng)站關(guān)鍵詞匯總當(dāng)天多輪采集時(shí)間,計(jì)算當(dāng)天每個社交媒體類網(wǎng)站的每個關(guān)鍵詞抓取所需平均訪問時(shí)間;按照公式(1)計(jì)算各新聞類網(wǎng)站的權(quán)重;按照公式(2)計(jì)算各社交媒體類網(wǎng)站的各關(guān)鍵詞的權(quán)重;各爬取節(jié)點(diǎn)的社交媒體類網(wǎng)站的關(guān)鍵詞負(fù)載均衡調(diào)節(jié)通過步驟i-3)至步驟i-10)來實(shí)現(xiàn);i-3).判斷耗時(shí)時(shí)間差,爬取主控節(jié)點(diǎn)計(jì)算出各爬取節(jié)點(diǎn)完成某社交媒體類網(wǎng)站的關(guān)鍵詞一輪抓取所需平均訪問時(shí)間,找出耗時(shí)最長和最短的爬取節(jié)點(diǎn),計(jì)算兩者耗時(shí)時(shí)間差,若兩者時(shí)間差不大于用戶預(yù)設(shè)調(diào)節(jié)時(shí)間差閾值,則維持當(dāng)前社交媒體類網(wǎng)站關(guān)鍵詞的分配狀態(tài),均衡負(fù)載結(jié)束;若兩者時(shí)間差大于用戶預(yù)設(shè)調(diào)節(jié)時(shí)間差閾值,則執(zhí)行步驟i-4);i-4).關(guān)鍵詞排序,爬取主控節(jié)點(diǎn)按照權(quán)重降序排列該社交媒體類網(wǎng)站的關(guān)鍵詞,執(zhí)行步驟i-5);i-5).重新分配關(guān)鍵詞,爬取主控節(jié)點(diǎn)從排好序的關(guān)鍵詞中,依次取出第1至第ncl個關(guān)鍵詞順序分配給spider1、spider2、…、spiderncl,然后依次取出第ncl+1至第2ncl個關(guān)鍵詞逆序分配給spider1、spider2、…、spiderncl,迭代該過程,直至分完該社交新聞類網(wǎng)站的所有關(guān)鍵詞,將此關(guān)鍵詞的分配記錄為初始狀態(tài)kw_init_assignment,spideri代表第i個爬取節(jié)點(diǎn),i≤ncl;執(zhí)行步驟i-6);i-6).迭代次數(shù)清零,抽取kw_init_assignment狀態(tài)中所有爬取節(jié)點(diǎn)中所有關(guān)鍵詞的權(quán)重,并計(jì)算爬取節(jié)點(diǎn)所分配關(guān)鍵詞權(quán)重的方差variance_init,并將迭代次數(shù)iteration清零,令iteration=0;i-7).迭代次數(shù)加1,令iteration=iteration+1,然后判斷迭代次數(shù)iteration是否小于指定迭代次數(shù)iteration_threshold,若是,則令本次迭代的方差variance_miniteration等于初始狀態(tài)方差,variance_miniteration=variance_init,執(zhí)行步驟i-8);否則,執(zhí)行步驟i-10);i-8).交換關(guān)鍵詞,隨機(jī)選擇兩個爬取節(jié)點(diǎn),并在所選擇的爬取節(jié)點(diǎn)中隨機(jī)選擇兩個關(guān)鍵詞進(jìn)行交換,然后重新抽取所有爬取節(jié)點(diǎn)中所有關(guān)鍵詞的權(quán)重,計(jì)算權(quán)重方差variance_random;執(zhí)行步驟i-9);i-9).比較權(quán)重方差的大小,比較variance_random與variance_miniteration的大小;如果variance_random<variance_miniteration,則保持兩個關(guān)鍵詞的交換,將variance_random賦值給variance_miniteration,令variance_miniteration=variance_random,并將交換失敗計(jì)數(shù)counter清零,令counter=0;variance_miniteration為所記錄關(guān)鍵詞權(quán)重方差的最小值,執(zhí)行步驟i-8);如果variance_random≥variance_miniteration,則撤銷兩個關(guān)鍵詞的交換,并使交換失敗計(jì)數(shù)counter加1,即令counter=counter+1;若交換失敗計(jì)數(shù)counter的值小于累計(jì)次數(shù)閾值counter_threshold,轉(zhuǎn)入步驟i-8);若counter≥counter_threshold,將此關(guān)鍵詞的分配記錄為第iteration次迭代狀態(tài)kw_intermediteration_assignment,轉(zhuǎn)入步驟i-7);i-10).選取最優(yōu)狀態(tài)進(jìn)行分配,比較多個kw_intermediteration_assignment中的關(guān)鍵詞權(quán)重方差variance_miniteration的值,將variance_miniteration值最小的kw_intermediteration_assignment記錄為關(guān)鍵詞分配最終狀態(tài)kw_final_assignment,按照此最終狀態(tài)更新爬取節(jié)點(diǎn)任務(wù)分配表,并按此表重新為各個爬取節(jié)點(diǎn)分配任務(wù);各爬取節(jié)點(diǎn)的新聞類網(wǎng)站的負(fù)載均衡調(diào)節(jié)采用與步驟i-3)至步驟i-10)相同的方法,只需將步驟i-3)至步驟i-10)中社交媒體類網(wǎng)站的關(guān)鍵詞替換為新聞類網(wǎng)站即可。當(dāng)爬取節(jié)點(diǎn)只應(yīng)用于信息采集時(shí),服務(wù)器負(fù)載即為兩類數(shù)據(jù)源的采集工作。此時(shí),當(dāng)采集任務(wù)均衡時(shí),可認(rèn)為各節(jié)點(diǎn)的負(fù)載也較為均衡。步驟i-2)所計(jì)算的新聞類網(wǎng)站和社交媒體類網(wǎng)站關(guān)鍵詞權(quán)重描述了采集任務(wù)的繁重程度,因此通過均勻地分配新聞類網(wǎng)站和社交媒體類網(wǎng)站關(guān)鍵詞,從而使得各爬取節(jié)點(diǎn)的權(quán)重和相似,即可達(dá)到均衡爬取節(jié)點(diǎn)負(fù)載的目的。此外,為滿足用戶需求,系統(tǒng)所需的vpn個數(shù)和爬取節(jié)點(diǎn)個數(shù)計(jì)算方法如下所示:1、vpn個數(shù)對社交媒體類網(wǎng)站的大規(guī)模采集對外網(wǎng)ip地址的要求遠(yuǎn)高于新聞類網(wǎng)站的采集,因此本發(fā)明所需的vpn個數(shù)主要受限于社交媒體類網(wǎng)站的關(guān)鍵詞,可通過如下公式大致估算:其中vpns表示所需vpn連接數(shù),nsearchpage表示檢索結(jié)果頁鏈接個數(shù),nvpn_ip表示社交媒體類網(wǎng)站允許一個ip地址采集的頁數(shù)。2、爬取節(jié)點(diǎn)個數(shù)本發(fā)明所需爬取節(jié)點(diǎn)的個數(shù)可通過如下公式大致估算:其中clients表示需要爬取節(jié)點(diǎn)的個數(shù),expecttime表示完成一輪采集所花費(fèi)的期望時(shí)間,accesstime表示連接遠(yuǎn)程服務(wù)器及采集數(shù)據(jù)時(shí)間,vpnlinktime表示vpn單次連接時(shí)間。當(dāng)前第1頁12