999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種優(yōu)化的網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)

2008-12-31 00:00:00趙文靜
電腦知識與技術(shù) 2008年35期

摘要:網(wǎng)絡(luò)爬蟲是搜索引擎的重要組成部分,它在搜索引擎中負責網(wǎng)絡(luò)信息的采集。詳細介紹了Web_Crawler,一種優(yōu)化的網(wǎng)絡(luò)爬蟲的設(shè)計和實現(xiàn),包括系統(tǒng)框架、主要模塊、多線程工作和數(shù)據(jù)緩沖池的轉(zhuǎn)存技術(shù)。Web-Crawler主要從多線程并行下載提高了速度,并利用數(shù)據(jù)緩沖池轉(zhuǎn)存技術(shù)在實現(xiàn)快速檢索的同時減少了存儲空間需求這兩方面來優(yōu)化網(wǎng)絡(luò)爬蟲。

關(guān)鍵詞:搜索引擎;信息采集;網(wǎng)絡(luò)爬蟲;數(shù)據(jù)緩沖池

中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)35-2082-02

Design and Implementation of a optimized Web-Crawler

CAO Zhong1,ZHAO Wen-jing2

(1.College of Computer and Educational Software,Guangzhou University,Guangzhou 510006,China;2.Center of Experiment,Guangzhou University,Guangzhou 510006,China)

Abstract: Web-Crawler is a important part of search engine,it is responsible for the network information gathering.The paper introduce the design and implement of a optimized Web-Crawler.It include the frame,Main module, multi-thread work and the data buffer pool Shift memory technology. Web-Crawler depends Multi-thread parallel downloading enhanced the speed,and uses the data buffer pool Shift memory technology to realize Fast retrieval and Reduced the storage space demand.

Key words: search engine; information gathering; web-crawler; data buffer pool

1 引言

搜索引擎(Search Engine)是隨著Web信息的迅速增加,從90年代中期開始逐漸發(fā)展起來的技術(shù)。面對Internet上浩如煙海的信息,搜索引擎主要功能就是方便人們快速地在Internet上找到自己所關(guān)心的信息。 網(wǎng)絡(luò)爬蟲程序是搜索引擎的重要組成部分。它通過請求站點上的HTML文檔訪問某一站點,它遍歷Web空間,不斷從一個站點移動到另一個站點,自動建立索引,并加入到網(wǎng)頁數(shù)據(jù)庫中。網(wǎng)絡(luò)爬蟲進入某個超級文本時,它利用HTML語言的標記結(jié)構(gòu)來搜索信息及獲取指向其他超級文本的URL地址,可以完全不依賴用戶干預(yù)實現(xiàn)網(wǎng)絡(luò)上的自動爬行和搜索。是整套搜索系統(tǒng)的流程啟動者。其設(shè)計的好壞和性能的優(yōu)劣直接影響系統(tǒng)的性能。

網(wǎng)絡(luò)爬蟲的主要功能包括:

1) 通過HTTP協(xié)議,從Internet中抓取網(wǎng)頁信息;

2) 判斷頁面內(nèi)容有無重復(fù);

3) 從頁面信息中提取URL,并判斷提取的URL的可用性;

4) 判斷獲取的URL是否已被訪問過,若未訪問則將此URL放入待訪問隊列中。

該文介紹了一種優(yōu)化的網(wǎng)絡(luò)爬蟲Web_Crawler的設(shè)計方案。由于網(wǎng)絡(luò)信息量的巨大,網(wǎng)絡(luò)爬蟲多采用多機并行的設(shè)計方案。

2 系統(tǒng)框架

Web_Crawler采用多機并行的設(shè)計方案。系統(tǒng)中包括一個本地配置器(Local Collocation)和多個網(wǎng)絡(luò)爬蟲Web_Crawler。本地配置器對被搜索的網(wǎng)絡(luò)進行邏輯劃分,并把劃分后的邏輯分區(qū)分配給每個網(wǎng)絡(luò)爬蟲。每一個網(wǎng)絡(luò)爬蟲采用多線程負責下載自己負責的邏輯分區(qū)內(nèi)的網(wǎng)頁,并通過本地配置器來相互交換下載任務(wù),相互之間通過高速的局域網(wǎng)進行通信。它們使用本地存儲空間存儲下載的網(wǎng)頁,但在存入本地存儲空間之前使用數(shù)據(jù)緩沖池進行轉(zhuǎn)存,在緩沖池中進行信息的標引,處理后的結(jié)果被集中保存在媒體內(nèi)容數(shù)據(jù)庫中以供檢索程序使用。整個系統(tǒng)框架如圖1 所示。

Web_Crawler:網(wǎng)絡(luò)爬蟲;

Local Collocation:本地配置器;

Data Buffer Pool:數(shù)據(jù)緩沖池;

Information Index Engine:信息標引引擎;

Media Content DataBase:媒體內(nèi)容數(shù)據(jù)庫。

3 多線程下載技術(shù)

多線程是一種機制,它允許在程序中并發(fā)執(zhí)行多個指令流,每個指令流都成為一個線程,彼此間互相獨立。多個線程的執(zhí)行是并發(fā)的,也就是在邏輯上“同時”,而不管是否是物理上的“同時”。因為系統(tǒng)只有一個CPU,那么真正的“同時”是不可能的,但是由于CPU的速度非常快,用戶感覺不到其中的區(qū)別,因此只需要設(shè)想各個線程是同時執(zhí)行即可。多線程和傳統(tǒng)的單線程在程序設(shè)計上最大的區(qū)別在于:由于各個線程的控制流彼此獨立,使得各個線程是亂序執(zhí)行的,因此必需注意的線程調(diào)度和同步等問題。

由于網(wǎng)絡(luò)爬蟲Web_Crawler采用MFC開發(fā),所以多線程并發(fā)工作必須使用MFC的線程機制。在MFC中,線程分為用戶界面線程和工作者線程(又稱為后臺線程或輔助線程)兩種。

用戶界面線程通常用來處理用戶輸入并響應(yīng)用戶生成的事件和消息;不需要用戶輸入的就是工作者線程。CWinAPP對象就是一個用戶界面線程,用戶界面線程一般都是主線程,在Windows操作系統(tǒng)下隨應(yīng)用程序啟動而自動創(chuàng)建,隨應(yīng)用程序的退出而終止。創(chuàng)建用戶界面線程先從CwinThread派生一個類,同時必須使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE來聲明和實現(xiàn)這個CWinThread派生類,然后根據(jù)需要重載該派生類的一些成員函數(shù),最后調(diào)用AfxBeginThread函數(shù)來啟動界面線程。

工作者線程用來執(zhí)行后臺的處理任務(wù),比如計算、壓縮、對文件或串口的讀寫操作等。它和用戶界面線程的區(qū)別是它不用從CWinThread類派生,它的創(chuàng)建主要是通過AfxBeginThread( )函數(shù)的另一個版本來實現(xiàn)。創(chuàng)建線程的方法有很多,也可以直接使用Win32 API函數(shù)CreateThread來實現(xiàn)。在此我們采用的是工作者線程來進行多線程抓取頁面數(shù)據(jù)和多線程數(shù)據(jù)緩沖緩池中提取數(shù)據(jù)進行標引等操作。

網(wǎng)絡(luò)爬蟲Web_Crawler采用多線程是為了使得多個線程并行的工作以完成多項任務(wù),以提高系統(tǒng)的使用效率。系統(tǒng)的多線程抓取數(shù)據(jù)和多線程提取數(shù)據(jù)如圖2所示。

4 數(shù)據(jù)緩沖池轉(zhuǎn)存技術(shù)

通常網(wǎng)絡(luò)爬蟲將抓取的數(shù)據(jù)存放到數(shù)據(jù)庫中,再重數(shù)據(jù)庫中調(diào)出數(shù)據(jù)進行數(shù)據(jù)標引等處理,再放入媒體內(nèi)容庫中。這一過程涉及了兩次數(shù)據(jù)庫的存儲過程,其效率會受數(shù)據(jù)庫的存取速度影響。然而網(wǎng)絡(luò)爬蟲將抓取的數(shù)據(jù)直接進行信息標引等操作,等一條信息處理存入媒體內(nèi)容庫后再抓取下一條信息又會使整個系統(tǒng)的效率大大降低。

而網(wǎng)絡(luò)爬蟲Web_Crawler在從網(wǎng)絡(luò)中抓取網(wǎng)頁數(shù)據(jù)后先將信息暫存在緩沖區(qū),當緩沖區(qū)到達一定大小的時候,系統(tǒng)觸發(fā)另一個線程將數(shù)據(jù)交給信息處理程序,也就是媒體處理程序,經(jīng)過媒體處理程序?qū)⒃季W(wǎng)頁數(shù)據(jù)加工后再存放到媒體內(nèi)容數(shù)據(jù)庫,以準備供用戶查詢使用。媒體處理程序定義了多個結(jié)構(gòu)體,也定義了多個結(jié)構(gòu)體數(shù)組,其中某些是用于處理分詞和切詞。實現(xiàn)時以一個結(jié)構(gòu)體來記錄URL和對應(yīng)的HTML:

struct memory_pool{

string strURLAddress;

string strURLContent;

memory_pool(string url = ””,string html = ””)

{strURLAddress = url;

strURLContent = html;}

};

在結(jié)構(gòu)體中,strURLAddress為網(wǎng)絡(luò)地址,也就是URL,類型為字符串(string);strURLContent為對應(yīng)地址的網(wǎng)頁(HTML),以文本形式存儲,類型也是字符串(string)。

考慮到網(wǎng)絡(luò)爬蟲與信息處理程序的處理速度不匹配問題,對于struct memory_pool這個結(jié)構(gòu)體并不是抓取一個就處理一個,而是先將每一個抓取到的結(jié)構(gòu)體放到緩沖區(qū)。緩沖區(qū)用一個動態(tài)數(shù)組實現(xiàn),當數(shù)組的元素個數(shù)到達一定大小的時候,另一個函數(shù)就將整個結(jié)構(gòu)體數(shù)組寫入數(shù)據(jù)庫,然后再將動態(tài)數(shù)組清空,循環(huán)寫入。流程圖如圖3所示:

信息搜索部分的“網(wǎng)絡(luò)爬蟲”程序用MFC開發(fā),而MFC中有一個CArray模板類,使用CArray模板類很容易就實現(xiàn)多維動態(tài)數(shù)組。CArray類支持與CArray相似的數(shù)組,但是必要時可以動態(tài)壓縮并擴展。數(shù)組索引從0開始,可以決定是固定數(shù)組上界還是允許當添加元素時擴展當前的邊界。內(nèi)存對上界是連續(xù)地分配空間,甚至一些元素可為空。和CArray一樣,CArray索引元素的訪問時間是不變的,與數(shù)組大小無關(guān)。

CArray的聲明如下:CArray name;其中class為數(shù)據(jù)類型,它可以是已經(jīng)定義的類型,也可以是自定義的類型。上面已經(jīng)指出struct memory_pool這個結(jié)構(gòu)體,在這里把struct memory_pool這個結(jié)構(gòu)體作為動態(tài)數(shù)組的參數(shù)。則:

CArray pool;

以上聲明了一個名為pool,數(shù)據(jù)類型為struct memory_pool的動態(tài)數(shù)組。聲明了自定義的動態(tài)數(shù)組后,接下來就是要將“網(wǎng)絡(luò)爬蟲”程序所獲取的數(shù)據(jù)暫時存放在pool這個動態(tài)數(shù)組。

搜集程序?qū)⑺鸭降臄?shù)據(jù)存放到緩沖區(qū),當緩沖區(qū)到達一定大小的時候,會觸發(fā)另一個函數(shù)將數(shù)據(jù)交給信息處理程序,也就是媒體處理程序,經(jīng)過媒體處理程序?qū)⒃季W(wǎng)頁數(shù)據(jù)加工后再存放到數(shù)據(jù)庫,以準備供用戶查詢使用。媒體處理程序定義了多個結(jié)構(gòu)體,也定義了多個結(jié)構(gòu)體數(shù)組,其中某些是用于處理分詞切詞。

5 結(jié)束語

網(wǎng)絡(luò)爬蟲作為搜索引擎的基本組成部分,它的爬行速度和爬行量直接影響著搜索效率與質(zhì)量。本文從搜索引擎的相關(guān)概念和構(gòu)成出發(fā),介紹了網(wǎng)絡(luò)爬蟲Web_Crawler的相關(guān)概念, 并闡述了網(wǎng)絡(luò)爬蟲的組成結(jié)構(gòu),采用了多線程并行下載和數(shù)據(jù)緩沖池技術(shù)的設(shè)計方案,大大優(yōu)化了網(wǎng)絡(luò)爬蟲程序網(wǎng)頁下載的速度和效率。

參考文獻:

[1] 徐遠超,劉江華,劉麗珍,關(guān)永.基于Web 的網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)[J].微計算機信息,2007,23(21):119-121.

[2] 將宗禮,趙欽,肖華,王蕊. 高性能并行爬行器[J].計算機工程與設(shè)計,2006(24):158-162.

[3] 王軍,彭建.網(wǎng)絡(luò)爬蟲的結(jié)構(gòu)設(shè)計研究[J].科技信息,2007(27):106-107,109.

[4] 謝建國.一個小型搜索引擎的系統(tǒng)設(shè)計[J].漳州職業(yè)技術(shù)學(xué)院學(xué)報,2007(4):13-16.

[5] 劉林,汪濤,樊孝忠.主題爬蟲的解決方案[J].華南理工大學(xué)學(xué)報(自然科學(xué)版),2004(s1):143-147.

[6] 劉暢,張輝.一種應(yīng)用于搜索引擎的索引結(jié)構(gòu)研究[J].計算機與數(shù)字工程,2005(9):43-46.

[7] 譚思亮.一種新的主題爬行算法[J].微計算機信息,2007(6):200-202.

[8] 王知津,等.現(xiàn)代信息檢索[M].北京:機械工業(yè)出版社,2005.

主站蜘蛛池模板: 日韩精品少妇无码受不了| 国产一级α片| 国产精品美女自慰喷水| 欧美日韩精品在线播放| 中文字幕乱码二三区免费| 欧美日韩精品在线播放| 91精品久久久无码中文字幕vr| 国产午夜福利亚洲第一| 一级爆乳无码av| 国产精品lululu在线观看| 亚洲天堂视频在线观看| AⅤ色综合久久天堂AV色综合| 欧美一区二区三区国产精品 | 亚洲欧美天堂网| 色播五月婷婷| 五月天久久综合| 全部免费特黄特色大片视频| 亚洲欧美精品一中文字幕| 人人看人人鲁狠狠高清| 成人精品亚洲| 99这里只有精品免费视频| 欧美精品v日韩精品v国产精品| 精品国产一区91在线| 婷婷综合色| 老司机精品99在线播放| 91精品福利自产拍在线观看| 国产区精品高清在线观看| 久久久久亚洲精品成人网| 黄色网站在线观看无码| 1024你懂的国产精品| 久久www视频| 亚洲黄色成人| 亚洲成人黄色在线| 97青青青国产在线播放| 欧美自慰一级看片免费| 国产精品无码久久久久久| 国内黄色精品| 久久精品丝袜高跟鞋| 免费亚洲成人| 久久亚洲美女精品国产精品| 午夜少妇精品视频小电影| 国产精品一区二区久久精品无码| 国产精品福利在线观看无码卡| 一本大道AV人久久综合| 99无码中文字幕视频| 久久99国产综合精品女同| 91亚洲视频下载| 日本欧美一二三区色视频| 亚洲精品午夜天堂网页| 婷婷午夜影院| 欧美yw精品日本国产精品| 成人免费午间影院在线观看| 欧美高清三区| 亚洲日本韩在线观看| 国产欧美日韩va另类在线播放 | 四虎精品国产永久在线观看| 超级碰免费视频91| 日韩一区二区在线电影| 日本午夜影院| 99久久国产自偷自偷免费一区| 亚洲一区网站| 国产经典免费播放视频| 中国一级毛片免费观看| 亚洲人成网站在线播放2019| 亚洲精品色AV无码看| 99热这里只有精品久久免费| 毛片免费网址| 亚洲国产精品无码AV| 亚洲制服丝袜第一页| 成人中文在线| 99精品免费在线| 亚洲欧美在线看片AI| 国产91精选在线观看| www.99精品视频在线播放| 福利在线免费视频| 真实国产乱子伦视频| 黄色网页在线播放| 97青青青国产在线播放| 日韩性网站| 黄色网页在线播放| 国产精品天干天干在线观看| aⅴ免费在线观看|