一种优化的网络爬虫的设计与实现

时间:2022-09-18 02:12:54

一种优化的网络爬虫的设计与实现

摘要:网络爬虫是搜索引擎的重要组成部分,它在搜索引擎中负责网络信息的采集。详细介绍了Web_Crawler,一种优化的网络爬虫的设计和实现,包括系统框架、主要模块、多线程工作和数据缓冲池的转存技术。Web-Crawler主要从多线程并行下载提高了速度,并利用数据缓冲池转存技术在实现快速检索的同时减少了存储空间需求这两方面来优化网络爬虫。

关键词:搜索引擎;信息采集;网络爬虫;数据缓冲池

中图分类号: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年代中期开始逐渐发展起来的技术。面对Internet上浩如烟海的信息,搜索引擎主要功能就是方便人们快速地在Internet上找到自己所关心的信息。 网络爬虫程序是搜索引擎的重要组成部分。它通过请求站点上的HTML文档访问某一站点,它遍历Web空间,不断从一个站点移动到另一个站点,自动建立索引,并加入到网页数据库中。网络爬虫进入某个超级文本时,它利用HTML语言的标记结构来搜索信息及获取指向其他超级文本的URL地址,可以完全不依赖用户干预实现网络上的自动爬行和搜索。是整套搜索系统的流程启动者。其设计的好坏和性能的优劣直接影响系统的性能。

网络爬虫的主要功能包括:

1) 通过HTTP协议,从Internet中抓取网页信息;

2) 判断页面内容有无重复;

3) 从页面信息中提取URL,并判断提取的URL的可用性;

4) 判断获取的URL是否已被访问过,若未访问则将此URL放入待访问队列中。

该文介绍了一种优化的网络爬虫Web_Crawler的设计方案。由于网络信息量的巨大,网络爬虫多采用多机并行的设计方案。

2 系统框架

Web_Crawler采用多机并行的设计方案。系统中包括一个本地配置器(Local Collocation)和多个网络爬虫Web_Crawler。本地配置器对被搜索的网络进行逻辑划分,并把划分后的逻辑分区分配给每个网络爬虫。每一个网络爬虫采用多线程负责下载自己负责的逻辑分区内的网页,并通过本地配置器来相互交换下载任务,相互之间通过高速的局域网进行通信。它们使用本地存储空间存储下载的网页,但在存入本地存储空间之前使用数据缓冲池进行转存,在缓冲池中进行信息的标引,处理后的结果被集中保存在媒体内容数据库中以供检索程序使用。整个系统框架如图1 所示。

Web_Crawler:网络爬虫;

Local Collocation:本地配置器;

Data Buffer Pool:数据缓冲池;

Information Index Engine:信息标引引擎;

Media Content DataBase:媒体内容数据库。

3 多线程下载技术

多线程是一种机制,它允许在程序中并发执行多个指令流,每个指令流都成为一个线程,彼此间互相独立。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。因为系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此只需要设想各个线程是同时执行即可。多线程和传统的单线程在程序设计上最大的区别在于:由于各个线程的控制流彼此独立,使得各个线程是乱序执行的,因此必需注意的线程调度和同步等问题。

由于网络爬虫Web_Crawler采用MFC开发,所以多线程并发工作必须使用MFC的线程机制。在MFC中,线程分为用户界面线程和工作者线程(又称为后台线程或辅助线程)两种。

用户界面线程通常用来处理用户输入并响应用户生成的事件和消息;不需要用户输入的就是工作者线程。CWinAPP对象就是一个用户界面线程,用户界面线程一般都是主线程,在Windows操作系统下随应用程序启动而自动创建,随应用程序的退出而终止。创建用户界面线程先从CwinThread派生一个类,同时必须使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE来声明和实现这个CWinThread派生类,然后根据需要重载该派生类的一些成员函数,最后调用AfxBeginThread函数来启动界面线程。

工作者线程用来执行后台的处理任务,比如计算、压缩、对文件或串口的读写操作等。它和用户界面线程的区别是它不用从CWinThread类派生,它的创建主要是通过AfxBeginThread( )函数的另一个版本来实现。创建线程的方法有很多,也可以直接使用Win32 API函数CreateThread来实现。在此我们采用的是工作者线程来进行多线程抓取页面数据和多线程数据缓冲缓池中提取数据进行标引等操作。

网络爬虫Web_Crawler采用多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的使用效率。系统的多线程抓取数据和多线程提取数据如图2所示。

4 数据缓冲池转存技术

通常网络爬虫将抓取的数据存放到数据库中,再重数据库中调出数据进行数据标引等处理,再放入媒体内容库中。这一过程涉及了两次数据库的存储过程,其效率会受数据库的存取速度影响。然而网络爬虫将抓取的数据直接进行信息标引等操作,等一条信息处理存入媒体内容库后再抓取下一条信息又会使整个系统的效率大大降低。

上一篇:聚焦爬行中网页爬行算法的改进 下一篇:基于eclipse进行Web开发的环境配置方案