王仕艷
(川北幼兒師范高等專科學(xué)校,四川 廣元628000)
目前互聯(lián)網(wǎng)中的數(shù)據(jù)還存在更新?lián)Q代快、推送慢影響消息利用率、客戶獲得數(shù)據(jù)速度慢等問(wèn)題[1-3]。而云時(shí)代下信息具有傳播速度快、數(shù)據(jù)集中管理、批量傳送數(shù)據(jù)等特點(diǎn),同時(shí)還支持個(gè)性化服務(wù),根據(jù)這些特點(diǎn)為用戶推送出滿足需求的數(shù)據(jù)信息,可提高數(shù)據(jù)信息的利用率。
當(dāng)前的數(shù)據(jù)抓取技術(shù)有多種,其中hadoop云平臺(tái)框架被廣泛使用,但是這些技術(shù)多以java技術(shù)實(shí)現(xiàn)[4-5]。面對(duì)快速系統(tǒng)開發(fā)時(shí)java語(yǔ)言不太能滿足,為此本文以C#語(yǔ)言作為系統(tǒng)開發(fā)語(yǔ)言使用開源nwebcrawler框架作為數(shù)據(jù)采集工具。
互聯(lián)網(wǎng)中包含大量信息,如何獲取這些信息加以使用能夠給企業(yè)、個(gè)人提供更多的信息資源從而增加企業(yè)競(jìng)爭(zhēng)和個(gè)人信息獲取來(lái)源。信息獲取大多來(lái)源于網(wǎng)站,由于行業(yè)、服務(wù)對(duì)象等不同造成網(wǎng)站有多種形式。如何獲取不同類別網(wǎng)站的信息是當(dāng)前面臨問(wèn)題。段青玲等文獻(xiàn)對(duì)農(nóng)業(yè)網(wǎng)絡(luò)信息進(jìn)行了獲取[4],文獻(xiàn)[6]對(duì)海上信息進(jìn)行了獲取,他們對(duì)不同的網(wǎng)站信息進(jìn)行了不同的獲取信息開發(fā),這樣增加了獲取信息的成本。為解決這一問(wèn)題,本文提出了一種通用網(wǎng)站信息獲取系統(tǒng)開發(fā)。系統(tǒng)功能主要有:(1)系統(tǒng)登錄管理,該功能用于權(quán)限管理,保障用戶信息安全。(2)系統(tǒng)配置管理,該功能用于抓取數(shù)據(jù)規(guī)則配置、數(shù)據(jù)管理等。(3)數(shù)據(jù)抓取管理,根據(jù)配置信息進(jìn)行數(shù)據(jù)抓取。(4)數(shù)據(jù)存儲(chǔ)管理,由于抓取的數(shù)據(jù)量比較大需要對(duì)數(shù)據(jù)進(jìn)行備份、還原等管理。系統(tǒng)用戶主要有:系統(tǒng)管理員、普通用戶兩類,系統(tǒng)管理員對(duì)系統(tǒng)管理,普通用戶進(jìn)行相應(yīng)的數(shù)據(jù)抓取管理。如圖1為系統(tǒng)總體用例圖。
圖1 系統(tǒng)總體用例圖
Web信息抓取平臺(tái)主要由三部分組成:數(shù)據(jù)源、數(shù)據(jù)采集以及數(shù)據(jù)分析,如圖2所示。在數(shù)據(jù)源中包含了多種類型的網(wǎng)站,這些網(wǎng)站提供采集信息;此外系統(tǒng)還配置有txt、xml、sqlite以及excel文件,這些文件用于存儲(chǔ)采集信息、配置信息等。數(shù)據(jù)采集功能有:抓取、抽取、分類等。信息服務(wù)中主要進(jìn)行信息發(fā)布、信息查詢、信息推薦、數(shù)據(jù)管理、收費(fèi)管理等。
在云環(huán)境下數(shù)據(jù)采集目的是方便用戶快速查詢信息,系統(tǒng)關(guān)鍵技術(shù)有:數(shù)據(jù)采集、數(shù)據(jù)抽取、數(shù)據(jù)分類、數(shù)據(jù)查詢等。下文詳細(xì)分析系統(tǒng)關(guān)鍵技術(shù)。
2.2.1 網(wǎng)站采集數(shù)據(jù)
Web數(shù)據(jù)采集主要是從Web上獲取網(wǎng)站網(wǎng)頁(yè),將網(wǎng)頁(yè)保存在文檔中,并將文檔中的信息提取出來(lái)。為提高系統(tǒng)開發(fā)效率,本文使用C#語(yǔ)言進(jìn)行網(wǎng)站數(shù)據(jù)采集系統(tǒng)開發(fā),該語(yǔ)言具有簡(jiǎn)單、易用特征,非常適合快速系統(tǒng)開發(fā)。當(dāng)前網(wǎng)站數(shù)據(jù)采集框架有多種,比如:WebCollector、Nutch、nwebcrawler等[7-8]。本 文選擇nwebcrawler框架作為網(wǎng)站采集數(shù)據(jù)框架,該框架具有源代碼開發(fā)、性能優(yōu)越等特點(diǎn)。如圖3為網(wǎng)站采集活動(dòng)圖。
圖2 系統(tǒng)總體設(shè)計(jì)
2.2.2 數(shù)據(jù)抽取技術(shù)
在C#網(wǎng)站數(shù)據(jù)抽取的類有:WebClient、Web-Browser、HttpWebRequest。本系統(tǒng)使用nwebcrawler框架、WebClient、WebBrowser進(jìn)行數(shù)據(jù)采集開發(fā)。數(shù)據(jù)抽取是系統(tǒng)核心技術(shù)。如下為網(wǎng)站數(shù)據(jù)抽取部分核心代碼。
//獲取網(wǎng)頁(yè)中所有的<td...></td>標(biāo)簽
HtmlElementCollection htmlCol = webBrowser1.Document.GetElementsByTagName("td");
if(htmlCol.Count<4)
{
return;
}
//根據(jù)網(wǎng)頁(yè)源代碼可以知道前四個(gè)是標(biāo)題
//設(shè)置表格標(biāo)題
dataGridView1.ColumnCount=4;
dataGridView1.Columns[0].Name = htmlCol[0].InnerText;
dataGridView1.Columns[1].Name = htmlCol[1].InnerText;
dataGridView1.Columns[2].Name = htmlCol[2].InnerText;
dataGridView1.Columns[3].Name = htmlCol[3].InnerText;
dataGridView1.Rows.Clear();
//從第四個(gè)即標(biāo)題后面開始四個(gè)一行加入列表中
for(int i=4;i<htmlCol.Count &&i+4<htmlCol.Count;i+=4)
{
dataGridView1.Rows.Add(new string[]{htmlCol[i].InnerText,htmlCol[i+1].InnerText
htmlCol[i+2].InnerText,htmlCol[i+3].Inner-Text});
}
Web信息抓取系統(tǒng)中使用數(shù)據(jù)庫(kù)有兩類:一類是SQLite數(shù)據(jù)庫(kù)用于存儲(chǔ)相應(yīng)的參數(shù);一類是網(wǎng)絡(luò)數(shù)據(jù)庫(kù)Mysql。在信息抓取系統(tǒng)中包含的數(shù)據(jù)表有:用戶權(quán)限表、信息存儲(chǔ)表、參數(shù)配置表等。
(1)用戶權(quán)限表。該表用于存儲(chǔ)用戶權(quán)限信息,包含的字段有:權(quán)限ID、權(quán)限內(nèi)容、用戶名、用戶ID、用戶密碼等,表1為詳細(xì)說(shuō)明。
表1 用戶權(quán)限表
(2)參數(shù)信息表。該表用于存儲(chǔ)系統(tǒng)參數(shù)信息,包含的字段有:參數(shù)ID、參數(shù)名、參數(shù)內(nèi)容、參數(shù)大小、參數(shù)時(shí)間、備注等。表2為參數(shù)信息詳細(xì)說(shuō)明。
表2 參數(shù)信息表
本文系統(tǒng)使用B/S模式進(jìn)行開發(fā)。由于系統(tǒng)功能較多,本文只列舉網(wǎng)站數(shù)據(jù)采集創(chuàng)建過(guò)程。用戶需要在界面中輸入網(wǎng)址規(guī)則、下載深度、網(wǎng)址過(guò)濾(使用正則表達(dá)式)、重復(fù)下載網(wǎng)址過(guò)濾、下載參數(shù)設(shè)置、網(wǎng)頁(yè)數(shù)據(jù)設(shè)置、javascript引擎設(shè)置、登錄設(shè)置、基本信息設(shè)置等。圖4為網(wǎng)站數(shù)據(jù)采集創(chuàng)建界面。
圖4 網(wǎng)站數(shù)據(jù)采集創(chuàng)建界面
本文構(gòu)建了Web信息抓取系統(tǒng),實(shí)現(xiàn)了Web信息采集,主要結(jié)論為:系統(tǒng)實(shí)現(xiàn)了數(shù)據(jù)采集、數(shù)據(jù)抽取、數(shù)據(jù)分類,用戶可在界面中輸入相應(yīng)的信息進(jìn)行數(shù)據(jù)采集,提高了系統(tǒng)的復(fù)用性。