◆曾 凱
(天津市醫(yī)藥科學研究所聯(lián)合辦 天津 300020)
醫(yī)藥科研信息網(wǎng)絡(luò)抓取方法研究
◆曾 凱
(天津市醫(yī)藥科學研究所聯(lián)合辦 天津 300020)
本文介紹了醫(yī)藥科研信息抓取系統(tǒng)中用到的數(shù)據(jù)抓取方法。為了高效地抓取網(wǎng)頁內(nèi)容,該方法采用帶偏好的寬度優(yōu)先遍歷方式訪問網(wǎng)頁,將待訪問的網(wǎng)址存放于高效的內(nèi)存數(shù)據(jù)庫BerKeley DB中,用布隆過濾器過濾已經(jīng)抓取過的網(wǎng)址。通過Delphi xe7開發(fā)系統(tǒng)提供的WebBrowser控件和微軟公司的MSHTML組件獲取網(wǎng)頁文本,將待提取數(shù)據(jù)文本劃分成數(shù)據(jù)行,將數(shù)據(jù)行及相應(yīng)的鏈接存入到對象數(shù)組中,用關(guān)鍵字在對象數(shù)組中匹配搜索時可實現(xiàn)精確和模糊搜索兩種方式。并利用計算機的多線程技術(shù)提高網(wǎng)頁抓取速度,利用多核優(yōu)勢帶來的并行編程技術(shù)提高對網(wǎng)頁內(nèi)容中關(guān)鍵字的搜索速度。以萬方醫(yī)學網(wǎng)和中國知網(wǎng)為實際案例,闡述了數(shù)據(jù)抓取過程及結(jié)果,并提供了簡化的Delphi xe7示例程序,結(jié)果表明,該方法能有效方便地應(yīng)用于醫(yī)藥科研信息的采集。
網(wǎng)頁內(nèi)容識別;數(shù)據(jù)采集;寬度優(yōu)先遍歷算法;內(nèi)存數(shù)據(jù)庫;布隆過濾器;多線程技術(shù);多核并行編程技術(shù)
在醫(yī)藥領(lǐng)域中從事科研工作,經(jīng)常需要從互聯(lián)網(wǎng)上獲取大量的醫(yī)學及醫(yī)藥方面的信息,服務(wù)科研工作。這些信息涉及范圍廣、更新快,需要科研人員經(jīng)常從眾多的網(wǎng)站中查找,費時費力。如果借助計算機技術(shù),根據(jù)他們提供的關(guān)鍵詞在其關(guān)注的科研網(wǎng)站上自動搜尋相關(guān)信息,自動抓取數(shù)據(jù),存入數(shù)據(jù)庫,進行加工處理,成為服務(wù)醫(yī)藥科研工作的“數(shù)據(jù)平臺”,為醫(yī)藥科研領(lǐng)域?qū)嵤┛茖W管理和科學研究提供重要的信息資源,就可以為科研工作者分析、利用信息資源進行科學管理、決策和開展大規(guī)模、高水平醫(yī)藥研究提供了有力的技術(shù)工具。如Butler,Leone,willenborg[1],以及Antweiler與Frank[2]等都利用互聯(lián)網(wǎng)網(wǎng)頁抓取技術(shù)獲取數(shù)據(jù),很好地服務(wù)于研究工作。本文詳細闡述網(wǎng)頁內(nèi)容抓取的實現(xiàn)技術(shù)、驗證窗口自動登錄的方法和先進的并行編程技術(shù),以詳實的編程代碼展示實現(xiàn)方法,該方法能簡單、方便地獲取網(wǎng)上信息資源。此外,簡要介紹帶偏好的寬度優(yōu)先遍歷算法、布隆過濾器的工作原理、內(nèi)存數(shù)據(jù)庫的優(yōu)勢及多線程爬蟲的結(jié)構(gòu)。
互聯(lián)網(wǎng)數(shù)據(jù)采集是指利用互聯(lián)網(wǎng)搜索引擎技術(shù)實現(xiàn)有針對性、行業(yè)性、精準性的數(shù)據(jù)抓取,并按照一定規(guī)則和篩選標準進行數(shù)據(jù)歸類,并形成數(shù)據(jù)庫文件的一個過程[3]?;ヂ?lián)網(wǎng)擁有海量的數(shù)據(jù),每日更新得非???。網(wǎng)頁一般由文本、圖片、Flash動畫、表格、聲音等元素組成。網(wǎng)頁數(shù)據(jù)具有分布廣、格式多樣、非完全結(jié)構(gòu)化或半結(jié)構(gòu)化等大數(shù)據(jù)的典型特點。因此,在定位和訪問網(wǎng)頁內(nèi)某數(shù)據(jù)項時,需根據(jù)網(wǎng)頁各元素的特征進行,可通過采集者的分析指引靈活進行[4-5]。數(shù)據(jù)抓取過程一般包括以下幾個步驟:
(1)確定抓取目標網(wǎng)址。先進入關(guān)注的網(wǎng)站,找到含有所需數(shù)據(jù)的網(wǎng)頁,判斷數(shù)據(jù)的準確性及抓取的難易程度,避免應(yīng)用了防采集措施的網(wǎng)站。
(2)仔細分析頁面內(nèi)容及其組織方式,確定抓取規(guī)則。由于網(wǎng)頁含有的元素和特性的數(shù)量十分巨大,除文字信息外,還有大量的頁面元素和其它多媒體數(shù)據(jù)。抓取前須了解網(wǎng)頁元素特點,確定所尋找的數(shù)據(jù)在網(wǎng)頁源文件代碼中的識別規(guī)則??筛鶕?jù)網(wǎng)頁源文件代碼進行分析。規(guī)則是:網(wǎng)址規(guī)則;網(wǎng)頁各元素的識別規(guī)則;數(shù)據(jù)行。
(3)借助數(shù)據(jù)抓取軟件或編程,依據(jù)規(guī)則抓取數(shù)據(jù)。
對網(wǎng)站的遍歷采用的是帶偏好的寬度優(yōu)先遍歷方式。
對網(wǎng)站的遍歷可分為寬度優(yōu)先和深度優(yōu)先遍歷兩種方式。深度優(yōu)先遍歷在深度遍歷子網(wǎng)頁時容易陷入“黑洞”。所以本系統(tǒng)采用帶偏好的寬度優(yōu)先遍歷。寬度優(yōu)先遍歷(BFS)算法是用分層搜索的方式遍歷網(wǎng)頁,將網(wǎng)站首頁作為起始點,采用層次遍歷的方式,逐層訪問網(wǎng)頁[6]。帶偏好的寬度優(yōu)先遍歷算法比傳統(tǒng)的寬度優(yōu)先遍歷算法有更高的效率。在訪問同一層的網(wǎng)頁時,把重要網(wǎng)頁的 URL鏈接地址從隊列中“挑”出來優(yōu)先抓取該網(wǎng)頁內(nèi)容。為了判斷該網(wǎng)頁是否重要,需要用到鏈接分析方法。本系統(tǒng)采用的是Google使用的PageRank算法,該算法并不是簡單地根據(jù)指向網(wǎng)頁的鏈接總數(shù)來計算,而是采用了運算法則:
PR(A)=(1-d)+d(PR(T1)/C(T1)+…+PR(Tn)/C(Tn))。
PR(A):網(wǎng)頁A的PageRank值;
PR(Ti):鏈接到A的Ti網(wǎng)頁的PageRank值;
C(Ti):網(wǎng)頁Ti的出站鏈接數(shù)量;
d:阻尼系數(shù),0 由于本系統(tǒng)訪問的網(wǎng)站擁有數(shù)量巨大的網(wǎng)頁,所以為獲得網(wǎng)頁的重要性PR(A),使用了近似的計算方法來計算。即給每個網(wǎng)頁一個初始值,例如:PR(A)為1,再按照PageRank算法,循環(huán)進行有限次運算,得到近似的PR(A)值。 本系統(tǒng)網(wǎng)絡(luò)爬蟲使用最關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)是非常流行的內(nèi)存數(shù)據(jù)庫,即Berkeley DB。 網(wǎng)絡(luò)爬蟲要訪問的網(wǎng)頁鏈接地址通常存放于隊列中,即內(nèi)存數(shù)據(jù)結(jié)構(gòu)。當面臨的網(wǎng)頁鏈接可能成千上萬時,內(nèi)存數(shù)據(jù)結(jié)構(gòu)就不適合這些應(yīng)用了。而本系統(tǒng)使用的內(nèi)存數(shù)據(jù)庫Berkeley DB可以解決該問題[7-8]。它能存儲大量數(shù)據(jù),當數(shù)據(jù)超出內(nèi)存容量時,能把它存儲在硬盤上;存取數(shù)據(jù)速度非??欤荒軌蛑С侄嗑€程訪問[9-10]。 在網(wǎng)絡(luò)爬蟲訪問網(wǎng)頁時,為了判斷該網(wǎng)址是否訪問過,需將該網(wǎng)址與 Visited表(即存放訪問過的網(wǎng)址)中的網(wǎng)址做比較,如果存在,說明訪問過了,就跳過該網(wǎng)址。計算機中的集合Visited表采用哈希表的方式存放。優(yōu)點是快速,缺點是占用較多的存儲空間。如果哈希表巨大,它存儲效率低的問題就突顯了。而布隆過濾器只需哈希表1/8至1/4的大小就能解決問題[11]。 布隆過濾器是一個很長的二進制向量和一系列隨機映射函數(shù)。工作原理是,假定Visited表里存儲了2億個網(wǎng)址,先建立一個20億二進制常量,它們的初始值為0。對于每個網(wǎng)址,用8個不同隨機數(shù)產(chǎn)生器產(chǎn)生8個信息指紋(f1,f2,…,f8)。再用一個隨機數(shù)產(chǎn)生器G把這8個信息指紋映射到20億中的8個二進制位中g(shù)1,g2,…,g8。這8個二進制位全部設(shè)置為1。所有網(wǎng)址都按此算法存放,節(jié)省存儲空間的布隆過濾器就建立好了。 布隆過濾器如何判斷某網(wǎng)址是否訪問過?用8個隨機數(shù)產(chǎn)生器(F1,F2,…,F8)對這個網(wǎng)址產(chǎn)生8個信息指紋,然后將這8個指紋對應(yīng)到布隆過濾器的8個二進制位,分別是T1,T2,…,T8。如果網(wǎng)址在Visited表中,則T1,T2,…,T8對應(yīng)的8個二進制位一定是1。 布隆過濾器的不足之處是它有極小的可能將一個未訪問過的網(wǎng)址判斷為已訪問過了。因為有可能某個網(wǎng)址正巧對應(yīng)8個都被設(shè)置成1的二進制位。不過這種出錯的概率為萬分之一以下??梢越⒁粋€名單,存儲容易誤判的網(wǎng)址[12]。 采用多線程并行抓取能同時獲得同一個網(wǎng)站的多個網(wǎng)頁,能極大地減少抓取網(wǎng)站的時間[13-15]。Delphi中有一個線程類TThread是用來實現(xiàn)多線程編程的。多線程爬蟲的結(jié)構(gòu)見圖1。 醫(yī)藥科研人員將需要搜索的信息作為關(guān)鍵字存入關(guān)鍵字數(shù)據(jù)庫中。將他們平常關(guān)注的網(wǎng)站的網(wǎng)址存入網(wǎng)址數(shù)據(jù)庫中。如果需關(guān)注的網(wǎng)站有用戶身份驗證需求,就需要將用戶名和密碼事先存入數(shù)據(jù)庫中,以便自動登錄完成驗證。網(wǎng)頁搜索方式可設(shè)定為當前網(wǎng)頁搜索和子網(wǎng)頁搜索。準備工作做好后,操作時選擇關(guān)注的網(wǎng)址、需搜索的關(guān)鍵字和網(wǎng)頁搜索方式,點擊開始。系統(tǒng)會依次進入各網(wǎng)站,進入到網(wǎng)站后獲取網(wǎng)頁,提取文本,搜索關(guān)鍵字,如果找到了,將關(guān)鍵字所在的語句和相關(guān)的鏈接存入數(shù)據(jù)庫中。顯示查看結(jié)果時,在界面左則中選擇感興趣的關(guān)鍵字,右則窗口上半部顯示含有該關(guān)鍵字的多個標題,點擊某個標題,右則下半部就顯示該標題所在的網(wǎng)頁。結(jié)果見圖2。 圖2 顯示搜索結(jié)果 自動輸入用戶名和密碼,實現(xiàn)網(wǎng)頁的自動登錄。 在訪問含論文及綜述類信息資源的網(wǎng)站時,如天津圖書館電子網(wǎng)站、中國知網(wǎng)等,這類網(wǎng)站往往需要用戶名及密碼。本系統(tǒng)可以找到輸入框,將存入數(shù)據(jù)庫中的用戶名及密碼分別帶入到輸入框中,完成自動登錄。代碼如下: WebBrowser1.OleObject.document.all.item( “username”,0).value:=’0001’//找到用戶名的輸入框,輸入用戶名 WebBrowser1.OleObject.document.all.item( “password”,0).value:=’AAAA’//找到密碼的輸入框,輸入密碼 目前網(wǎng)站開發(fā)技術(shù)很多,網(wǎng)頁格式因此各不相同,如流行的格式有html、xml、asp、jsp等,但無論如何,它們都是通過HTTP協(xié)議將數(shù)據(jù)傳輸?shù)娇蛻魹g覽器的。 獲取網(wǎng)頁源文件內(nèi)容的過程是,先實現(xiàn)對網(wǎng)頁的下載,再解析網(wǎng)頁。本系統(tǒng)在 Delphi xe7應(yīng)用程序開發(fā)環(huán)境中調(diào)用WebBrowser 控件實現(xiàn)網(wǎng)頁信息的獲取功能,達到下載目的。通過 WebBrowser 控件的 Document文檔接口對象實現(xiàn)對網(wǎng)頁的解析,方法簡單實用,分以下幾個步驟:(1)創(chuàng)建WebBrowser 控件;(2)通過控件方法Navigate連接到指定的網(wǎng)址;(3)通過控件屬性Document獲取對控件內(nèi)顯示網(wǎng)頁的訪問途徑。(4)通過as將 WebBrowser.Document轉(zhuǎn)換為 Ihtmldocument2接口類型,用Ihtmldocument2接口訪問網(wǎng)頁Html的源文件文本。因為MSHTML是微軟公司的一個COM組件,該組件封裝了HTML語言中的所有元素及其屬性,通過其提供的標準接口,可以訪問指定網(wǎng)頁的所有元素.Ihtmldocument2接口是 MSHTML里的一個對象,用Ihtmldocument2的InnerHTML屬性可以獲得網(wǎng)頁源文件內(nèi)容。 例如,下述為基于Delphi用于讀取網(wǎng)頁源文件的部分代碼。它返回指定網(wǎng)頁源文件文本。 WebBrowser1.Navigate(Trim(Edit4.Text));//用 WebBrowser控件打開網(wǎng)頁,Edit4.Text指定網(wǎng)址 str_html:=(webBrowser1.Document as IHtmlDocument2).Body.innerHTML;//將網(wǎng)頁內(nèi)容存入str_html字符串變量中。 通過查找關(guān)鍵字,判斷網(wǎng)頁中是否含有所需要的內(nèi)容,有兩種方法可以實現(xiàn)。(1)采用正則表達式,搜索關(guān)鍵字。優(yōu)點:善于捕獲字符串,尤其是匹配url,email這種純文本的字符。缺點:只適合匹配文本字面,不適合匹配文本意義;貪婪匹配符號很容易造成大量的回溯,性能有時候會有上百萬倍的下降;正則的替換功能較差:甚至沒有基本的截取字符串或者把首字母改變大小寫的功能。該方法用于在不常用的網(wǎng)站中搜索內(nèi)容。(2)通過自編的代碼實現(xiàn)類似的功能,在特定的環(huán)境中具有針對性、實用性和靈活性。該方法用于在常用的網(wǎng)站中搜索內(nèi)容。 (1)為了采用正則表達式,在Delphi中使用第三方正則組件PerlRegEx。 部分代碼: Uses PerlRegEx; ……… RegEx := TPerlRegEx; Try RegEx.Subject := str_html;// str_html 存放網(wǎng)頁源文件內(nèi)容。 RegEx.RegEx :=’分子靶向|兒童食道|結(jié)直腸腫瘤’; if RegEx.Match then .... finally RegEx.free end; 有時想獲取網(wǎng)頁中符合特定格式的鏈接,用正則表達式實現(xiàn)的效果最好。 圖1 多線程爬蟲的結(jié)構(gòu) 想捕獲的鏈接是“ ” 正則表達式為:<[aA] s+ [hH] [rR] [eE] [fF]=s*(“|’)?(.*)(1)(s[^>]*)*?>(.*?)< /[aA]> (2)通過自編的代碼實現(xiàn)類似的功能。從源文件內(nèi)容中去除代碼,提取文字內(nèi)容。 例如為了從醫(yī)學文獻網(wǎng)站上搜尋相關(guān)的信息,就要在獲取源文件內(nèi)容后,對數(shù)據(jù)進行提取并解析。源文件代碼中經(jīng)常會包含、、、等標簽,文字內(nèi)容會顯示在一對標簽的中間,如?!皟和车喇愇锏闹委煵呗浴笔菐в墟溄拥奈谋荆撐谋镜那懊嬗幸粋€標識是“>”,可以作為執(zhí)行提取文本操作的開始標識,后面有一個“<”,可作為結(jié)束標識。獲得文本后,還需要獲得相關(guān)鏈接。該文本前面的“href="”可作為鏈接地址的開始標識,鏈接地址后面的“"”可作為鏈接地址的結(jié)束標識,從而提取完整的鏈接地址。將文本和鏈接地址分別存入到對象數(shù)組中,以便查尋結(jié)果時使用。見圖3,圖4。 圖3 萬方醫(yī)學網(wǎng)首頁 圖4 首頁部分源代碼 聲名類TKey_Link,存放文本和鏈接地址 TKey_Link=class(Tpersistent) public Fkey:string; 存放文本 FLink:string; 存放該文本的鏈接地址 end; 用函數(shù) GetKey_Link提取文本和鏈接地址,存入對象數(shù)組FGroupKey_Link中。該函數(shù)用到了pos函數(shù),pos的功能是得到子串在父串中第一次出現(xiàn)的位置,用pos分別獲得開始標識“>”和結(jié)束標識“<”的位置,這兩個位置中間的內(nèi)容就是文本內(nèi)容。代碼如下: Function TForm1.GetKey_Link(webBrowser:TwebBrowser) :TObjectList; var …… FGroupKey_Link:TObjectList; //定義對象數(shù)組 FKey_Link:TKey_Link; begin FGroupKey_Link:=TObjectList.Create;//定義對象數(shù)組 str_html:=(webBrowser.Document as IHtmlDocument2).Body.innerHTML;//將網(wǎng)頁源文件內(nèi)容存入str_html字符串變量中。 p1:=pos('>',str_html);//獲得開始標識的位置 while (p1>0) do begin str_front:=copy(str_html,1,p1);//獲得開始標識之前的內(nèi)容,含標識符 str_html:=copy(str_html,p1+1,length(str_html)-p1);獲得開始標識之后的內(nèi)容 if (copy(str_html,1,4)='',str_html); str_html:=copy(str_html,p5+Length('-->'),Length(str_html)-(p5+Length('-->')-1)); end; p2:=pos('<',str_html);獲得結(jié)束標識的位置 str_chart:=trim(copy(str_html,1,p2-1));截取兩標識之間的文本內(nèi)容 if (length(str_chart)>0) then begin FKey_Link:=Tkey_Link.Create; strPress:=''; for j:=1 to Length(str_chart) do strPress:=strPress+trim(copy(str_chart,j,1)); str_chart:=strPress; FKey_Link.Fkey:=str_chart;將截取的文本內(nèi)容存入對象的屬性Fkey中。 str_Link:=''; p3:=pos('href="',str_front);//該文本如果含鏈接地址,就將地址存入str_Link中 if(p3>0) then begin str_front:=copy(str_front,p3+Length('href="'),Length(str_front)-(p 3+Length('href="'))+1); p4:=pos('"',str_front); if (p4>0) then begin str_Link:=copy(str_front,1,p4-1); end; end; if (Length(trim(str_Link))>0) then begin ……去掉地址中無用的字符。 FKey_Link.FLink:=str_Link;將地址存入對象的屬性Flink中 end; FGroupKey_Link.Add(FKey_Link);//將對象存入對象數(shù)組 end; str_html:=copy(str_html,p2+1,length(str_html)-p2);//截取結(jié)束標識之后的文本,以便繼續(xù)搜索 p1:=pos('>',str_html); end; Result:=FGroupKey_Link; end; (3)利用計算機的多核優(yōu)勢,在提取的文字內(nèi)容中以并行方式搜索關(guān)鍵字,提取所需數(shù)據(jù)。 獲得網(wǎng)頁文本后,根據(jù)定義的關(guān)鍵字,對網(wǎng)頁文本進行匹配搜索以提取所需數(shù)據(jù)。 定義FKeyName為字符串數(shù)組,存放關(guān)鍵字,如FKeyName[0]:='分子靶向'; FKeyName [1]:='兒童食道';……FKeyName [7]:=’結(jié)直腸腫瘤' 。" 將FkeyName數(shù)組的元素分別帶入到isExist函數(shù)中,用isExist函數(shù)在存放網(wǎng)頁文字內(nèi)容的對象數(shù)組FGroup中遍歷查詢關(guān)鍵字,若找到,返回真,將含有關(guān)鍵字的語句和鏈接地址存入數(shù)據(jù)庫中[16]。 本系統(tǒng)在isExist函數(shù)中采用了先進的并行編程技術(shù)?,F(xiàn)在計算機都有多個 CPU單元,在開發(fā)中利用多核優(yōu)勢進行并行編程[17-18],可以節(jié)約系統(tǒng)的運行時間,提高工作效率[19-20]。在Delphi xe7中,有一個簡化并行運行任務(wù)的庫,叫做并行編程庫。并行編程庫在System.Threading單元中,其中提供了很多有用的特性。使用并行庫,應(yīng)把for循環(huán)用類函數(shù)TParallel.For替代,并傳遞一個匿名方法[21]。 關(guān)鍵代碼如下:function TForm1.isExist(str:string;webBrowser:TMozillaBrowser;isAll:Boolean=true):Boolean; var i,j:integer; FGroup:TObjectList; isExist:Boolean; begin isExist:=false; FGroup:=GetKey_Link(webBrowser);//從網(wǎng)頁中獲取文本內(nèi)容,存入對象數(shù)組中 TParallel.For(1,FGroup.Count-1,procedure(I: Integer)//在數(shù)組中做關(guān)鍵字的遍歷查詢,找到返回真 begin if (isAll=true) then begin if (str=TKey_Link(FGroup[i]).Fkey) then//完全匹配 begin isExist:=true; break; end; end else begin if (pos(str,TKey_Link(FGroup[i]).Fkey)>0) then//部分匹配 begin isExist:=true; break; end; end; end); FreeAndNil(FGroup); Result:=isExist; end; 醫(yī)藥科學研究的一個關(guān)鍵環(huán)節(jié)是數(shù)據(jù)獲取?;ヂ?lián)網(wǎng)蘊含的海量數(shù)據(jù)具有免費、實時等特點,是重要的數(shù)據(jù)來源渠道。本文介紹的數(shù)據(jù)抓取技術(shù),可有效從互聯(lián)網(wǎng)大量的信息中找到所需信息收集起來以供研究。所提供的Delhpi xe7示例代碼簡單、實用,可使人們依據(jù)需要,便捷準確地定制抓取方案,成為數(shù)據(jù)獲取的得力助手。 [1]Marty Butler,Andrew J Leone,Michael Willenborg.An empirical analysis of auditor reporting and its association with abnormal accruals[J].Journal of Accounting and Economics,2004. [2]Werner Antweiler,Murray Z Frank.Is all that talk just noise?The information content of Internet stock message boards[J].Journal of Finance,2004. [3]楊鎧懋.搜索引擎的研究與設(shè)計[D].電子科技大學,2010 [4]周立柱,林玲.聚焦爬蟲技術(shù)研究綜述[J].計算機應(yīng)用,2005. [5]劉金紅,陸余良.主題網(wǎng)絡(luò)爬蟲研究綜述[J].計算機應(yīng)用研究,2007. [6]李浩.網(wǎng)絡(luò)蜘蛛的研究與實現(xiàn)[J].科技信息,2012. [7]萬瑪寧,關(guān)永,韓相軍.嵌入式數(shù)據(jù)庫典型技術(shù)SQLite與BerKeley DB的研究[J].微計算機信息,2006. [8]宋麗娜.嵌入式數(shù)據(jù)庫典型技術(shù)-SQLite和BerKeley DB的研究[J].科技信息(學術(shù)研究),2008. [9]虞珊,周彩蘭,郭鳳玲.BerKeley DB在網(wǎng)絡(luò)信息挖掘中的應(yīng)用[J].計算機與現(xiàn)代代,2008. [10]劉巍巍,徐成,李仁發(fā).嵌入式數(shù)據(jù)庫Berkeley DB的原理與應(yīng)用[J].科學技術(shù)與工程,2005. [11]徐娜,劉四維,汪翔,倪衛(wèi)明.基于Bloom Filter的網(wǎng)頁去重算法[J].微型電腦應(yīng)用,2011. [12]于振國.基于Bloom Filter的大規(guī)模網(wǎng)頁去重策略研究[J].現(xiàn)代圖書情報技術(shù),2008. [13]李建宏,何玉珠.多線程技術(shù)在復(fù)雜數(shù)據(jù)采集系統(tǒng)中的應(yīng)用.電子測量技術(shù),2008. [14]眭俊華,劉慧娜,王建鑫等.多核多線程技術(shù)綜述[J].計算機應(yīng)用,2013. [15]李鵬.多線程技術(shù)在數(shù)據(jù)通信中的應(yīng)用[J].信息產(chǎn)業(yè),2013. [16]盧超,梅衛(wèi)峰,陳俊良等.基于感興趣度的WWW個性化信息發(fā)現(xiàn)[J].計算機科學,2002. [17]吳繼燕.多核技術(shù)及發(fā)展趨勢[J].哈爾濱軸承,2007. [18]李曉明,王韜,劉東,杜江凌.走進多核時代[J].計算機科學與探索,2008. [19]周偉明.多核計算與程序設(shè)計[M].武漢:華中科技大學出版社,2008. [20]Akhter S.多核程序設(shè)計技術(shù)[M].李寶峰,譯.北京:電子工業(yè)出版社,2008. [21]多核系列教材編寫組.多核程序設(shè)計[M].北京:清華大學出版社,2007.2.2 數(shù)據(jù)結(jié)構(gòu)
2.3 使用布隆過濾器構(gòu)建Visited表
2.4 使用多線程技術(shù)提高爬蟲的抓取速度
3 醫(yī)藥科研信息采集過程
3.1 網(wǎng)頁源文件內(nèi)容獲取
3.2 下載網(wǎng)頁內(nèi)容并解析
3.3 判斷網(wǎng)頁中是否含有所需的關(guān)鍵字
4 結(jié)束語