一种基于网页爬取的爬虫技术的制作方法

文档序号:6499700阅读:181来源:国知局
一种基于网页爬取的爬虫技术的制作方法
【专利摘要】本发明涉及【技术领域】,具体涉及一种基于网页爬取的爬虫技术,初始化URL链接地址后,包括:1)均衡分配爬虫线程从给定的入口起在运行队列读取排列在队首的URL链接地址;2)判断所述URL链接地址是否存在,是则停止爬取,否则,爬取所述URL链接地址放入完成队列;3)对放入所述完成队列的所述URL链接地址对应的网页进行提取;4)对所述提取的网页中的URL链接地址过滤,留取有效URL链接地址写入运行队列,返回步骤1)重复以上步骤。本发明基于用户设定的对象,根据用户创建的任务,从互联网爬取对应的资源、重写URL并进行存储,实现有针对性的对互联网信息进行采集;同时,能够实现多机并行爬取、多任务调度、断点续抓、分布式爬虫管理以及爬虫控制。
【专利说明】一种基于网页爬取的爬虫技术
【技术领域】
[0001]本发明涉及互联网信息采集【技术领域】,具体涉及一种用于档案馆、图书馆、文化馆等领域中互联网信息采集的一种基于网页爬取的爬虫技术。
【背景技术】
[0002]随着网络的迅速发展,万维网成为大量信息的载体。搜索引擎作为一个辅助人们检索信息的工具,成为用户访问万维网的入口和指南,目前的通用搜索引擎在信息获取方面均存在着一定的局限性,即无法提供服务定制,如不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的内容。商业搜索引擎由于面向社会提供服务,追求大而全,无法按用户的需求进行定制,反馈给用户的信息过多,噪声太大难以人工处理。
[0003]网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成,传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,并保存该网页信息。在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件,如层数、连接数等。
[0004]要在搜索引擎中尽可能地找到用户所需信息,就要求搜索引擎索引尽可能多的网页。采用分布式技术在尽可能短的时间内搜集尽可能多的网页,到目前为止,分布式网络爬虫系统已经有了不少应用。
[0005]网络爬虫的主过程由控制器、解析器、资源库组成。控制器是网络爬虫的中央控制器,主要是负责根据传过来的URL链接,分配一线程,然后启动线程调用爬虫爬取网页的过程。解析器是负责网络爬虫(从web中发现,下载以及存储内容)的主要部分,主要是下载网页,进行页面文本的处理,如过滤功能,抽取特殊HTML标签的功能,分析数据功能,将一些JS脚本标签、CSS代码内容、空格字符、HTML标签等内容处理掉,爬虫的基本工作是由解析器完成。资源库是用来存放网页中下载到的网页资源数据,一般都采用大型的数据库存储,并对其建立索引。

【发明内容】

[0006]本发明的目的是为了克服现有技术中的缺点而提供一种基于网页爬取的爬虫技术,旨在解决目前通用搜索引擎不能基于用户定制提供搜索服务,所返回的搜索结果包含大量用户不关心的内容不能满足用户需要的技术问题。
[0007]本发明是这样实现的,一种基于网页爬取的爬虫技术,初始化URL链接地址后,包括以下步骤:
[0008]I)均衡分配爬虫线程从给定的入口起在运行队列读取排列在队首的URL链接地址;
[0009]2)判断所述URL链接地址是否存在,是则停止爬取,否则,爬取所述URL链接地址放入完成队列;[0010]3)对放入所述完成队列的所述URL链接地址对应的网页进行提取;
[0011]4)对所述提取的网页中的URL链接地址过滤,留取有效URL链接地址写入运行队列,返回步骤I)重复以上步骤。
[0012]当所述排列在队首的URL长度超过预设阈值时,所述爬虫线程停止对所述对排列在队首的URL进行爬取。
[0013]所述爬虫线程从运行队列爬取排列在队首的URL时,采取广度优先法进行爬取,即先从所述URL的起始网页开始,抓取所述起始网页中所有链接的网页,然后从抓取的所述所有链接的网页中再选择一个网页,抓取所述选择的网页中的所有链接页面,直至所述所有链接的网页中所有网页中的所有链接页面全部抓取完毕。
[0014]所述步骤2)中,所述爬取所述URL链接地址的具体步骤如下:
[0015]爬虫线程开启后,首先由中心爬虫将待爬取的起始页URL链接地址读取到爬虫缓存,然后根据爬取优先顺序对放入到所述爬虫缓存中所述起始页URL链接地址中的内容进行抓取、解析、抽取所述内容中的详细URL链接地址放入URL存储容器中,最后将抽取到的详细URL链接地址进行再次爬取。
[0016]所述对抽取的详细URL链接地址进行抽取时,对抽取到的所述详细URL链接地址进行去重、增量操作,以免出现重复爬取同一个详细URL网址的情况。
[0017]所述对抽取到的详细URL链接地址进行抽取的步骤如下:
[0018]A、从所述URL存储容器中读取待爬取的详细URL链接地址,并对所述详细URL链接地址进行正确性校验,将校验正确的待爬取详细URL链接地址放入爬虫缓存中;
[0019]B、从互联网中爬取指定详细URL链接地址,将爬取到的网页信息内容进行相应解码、解压缩;
[0020]C、解析爬取到的所述网页信息,抽取出网页中的URL链接地址,并对所述网页中的URL链接地址进行校验、去重操作;然后重复以上步骤A-C。,所述爬虫线程从给定的入口起在运行队列读取排列在队首的URL链接地址的步骤之前,还包括以下步骤:
[0021]在接收任务请求后,把任务拆分成任务分片,每个任务分片仅包含一个网站,每个任务分片均衡分配给多个爬虫并行执行。
[0022]在爬虫线程执行任务过程中,为每个爬虫线程的处理进度保存状态,每取一批网页都要记录本线程最大的网页ID,记录到数据库里,进程重启后读取ID,恢复爬虫系统的爬取环境,接着抓后面的页面。
[0023]采用Hash算法均衡分配爬虫线程的任务,即每一个URL经过Hash函数计算得哈希值,不同的哈希值对应不同的爬虫,将一个URL交给Hash函数计算出的对应爬虫进行处理。
[0024]本发明基于用户设定的互联网对象,根据用户创建的任务,从互联网爬取对应的资源、重写URL并进行存储,实现有针对性的对互联网信息进行采集;同时,本发明能够实现多机并行爬取、多任务调度、断点续抓、分布式爬虫管理以及爬虫控制。
【专利附图】

【附图说明】
[0025]图1所示为本发明实施例提供的一种基于网页爬取的爬虫技术的流程图;
[0026]图2所示为本发明实施例提供的爬虫的爬取过程示意图。【具体实施方式】
[0027]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。
[0028]本发明基于用户设定的互联网对象,根据用户创建的任务,从互联网爬取对应的资源、重写URL对互联网信息进行有针对性的采集并进行存储。
[0029]参见图1,该图示出了本发明提供的一种基于网页爬取的爬虫技术的流程。为了便于说明,仅示出了本发明有关的部分。
[0030]一种基于网页爬取的爬虫技术,初始化URL链接地址后,包括以下步骤:
[0031]I)均衡分配爬虫线程从给定的URL入口起在运行队列读取排列在队首的URL链接地址;
[0032]2)判断所述URL链接地址是否存在,是则停止爬取,否则,爬取所述URL链接地址放入完成队列;
[0033]3)对放入所述完成队列的所述URL链接地址对应的网页进行提取;
[0034]4)对所述提取的网页中的URL链接地址过滤,留取有效URL链接地址写入运行队列,返回步骤I)重复以上步骤。
[0035]本发明 实施例中,在进行步骤I)时,首先从一个给定的URL作为入口,开始爬取万维网的呈蝴蝶型的可视图,网络爬虫一般从蝴蝶型可视图左边机构出发按上述步骤进行爬取。由于本发明实施例采用运行队列和完成队列来保存不同状态的链接,既可以进行海量的数据抓取,还可以拥有断点续抓功能。另外,在每处理完一个URL,将其放入完成队列,可防止重复访问,并在每次抓取网页之后分析所述网面中的URL进行过滤,将经过过滤的合法链接写入运行队列,等待提取。
[0036]本发明实施例中,当所述读取的URL长度超过预设阈值时,所述爬虫线程停止对所述读取的URL进行爬取。
[0037]由于网络爬虫访问的是后台html代码,网络爬虫在分析出URL之后,对URL进行过滤并将过滤后得到结果放入运行队列。因此,在取得URL时要提防一种“爬虫陷阱”。因为即使一个URL能访问到相应内容,也不能保证存储服务器端有一个的相应页面存在,例如动态网页的应用可能会使网站中存在一些无法穷尽的地址,让爬虫在一个位置上无限循环而无法终结。
[0038]为此,本发明实施例中,在检查出一个URL的长度或“/”的数量超出设定的阈值时,控制网络爬虫不再获取该URL。
[0039]本发明实施例中,所述爬虫线程从运行队列爬取排列在队首的URL时,采取广度优先法进行爬取,即先从所述URL的起始网页开始,抓取所述起始网页中所有链接的网页,然后从抓取的所述所有链接的网页中再选择一个网页,抓取所述选择的网页中的所有链接页面,直至所述所有链接的网页中所有网页中的所有链接页面全部抓取完毕。
[0040]参见图2所示,本发明实施例中,所述步骤2)中,所述爬取所述URL链接地址的具体步骤如下:
[0041]爬虫线程开启后,首先由若干个中心爬虫1、2、3....N,将待爬取对象I,对象2、对象3……对象N的起始页URL链接地址读取到爬虫缓存,爬虫缓存是图2中的“中心网页URLS待爬取库”,系统在依据URL本身的特性区分出中心网页和详细页面,爬虫直接对中心网页进行爬取并存储到文件系统中;详细URL则存储到缓存器(URL)中,该缓存器中存储未去重的临时详细URL缓存器;然后去重模块在将详细URL进行去重,同时改写模块从“URL去重库”中读取详细页面URL地址,依据详细页面URL的域名属性,细节爬虫1、2、3....N依据规则找到对应的详细URL地址,然后将详细页面存储到文件记录系统中。
[0042]本发明实施例中,所述对抽取的详细URL链接地址进行抽取时,对抽取到的所述详细URL链接地址进行去重、增量操作,以免出现重复爬取同一个详细URL网址的情况。
[0043]本发明实施例中,所述对抽取到的详细URL链接地址进行抽取的步骤如下:
[0044]A、中心爬虫从所述URL存储容器中读取待爬取的URL链接地址,并将从URL页面中抽取出来的链接地址存储到“中心页面URLS待爬取库”、“缓存器”中,其中“中心页面URLS待爬取库”主要存储中心页面URL地址,“缓存器”中主要存储详细页面的URL地址;
[0045]B、中心爬虫根据中心网页的地址将网页内容从互联网中爬取下来并存储到文件记录系统中,并将抽取出来的详细页面URL地址放入到“缓存器”中;
[0046]C、去重模块从详细URL缓存库中取出待爬取的详细页面的URL地址,依据去重规则将详细页面的URL地址进行去重,并将去重后的URL地址存储到“Url去重库”;
[0047]D、改写模块从“Url去重库”中拿到去重后的URL地址,根据现有的应用服务器、数据库服务器配置,将网页中的URL地址改写成本应用能够访问的地址后,存储到“详细网页URL待爬取库”;
[0048]E、细节爬虫1、2、3....N依据规则找到对应的详细URL地址,然后将详细页面存储到文件记录系统中;然后重复以上步骤A-E。
[0049]本发明实施例中,为达到对整体信息采集速度和质量的控制,对爬虫数量、爬取速度进行调配,并支持爬虫任务转移,当某一个爬虫不能工作时,选择或自动将本爬虫任务转移给其他爬虫。
[0050]本发明实施例中,所述多个爬虫可以同时对多个任务进行爬取,均衡的爬取多个任务中的链接地址,以便每个任务都有快速的响应时间。
[0051]由于用户依次下发的任务往往包含若干个网站,这些网站之间并没有先后执行的依赖关系,这样会造成系统的吞吐量和资源利用率低。本发明实施例中,为了提高系统的吞吐量和资源利用率,在接收任务请求后,还把任务拆分成任务分片,每个任务分片仅包含一个网站,每个任务分片由多个爬虫进行并行执行,这样,任务调度粒度实际上是任务分片,这样可以提高系统的吞吐量和资源利用率。例如,资源用户A下发的任务包含网站http://www.163.com、http: //www.yahoo, com.cn、http: //news.qq.com,用户 B 下发的任务包括网站 http://news, baidu.com>http://news, google.com、http: //www.163.com。如果系统的调度粒度是任务,那么同一时刻只允许一个用户的任务执行,因为A和B的任务都包含相同的网站http://www.163.com,更糟的是A的任务只能给一个爬虫执行,不利于爬虫间的负载均衡。而如果调度粒度是任务分片,那么A和B下发的任务就被差分成了六个任务分片,其中只有两个任务分片存在互斥的关系,换句话说只有一个任务分片需要等待,其他五个任务分片都可以并行执行,同时,这五个任务分片可以根据调度算法分配给若干个不同爬虫执行,从而提高了系统的吞吐量和资源利用率。
[0052]为了提高系统吞吐量,系统要保证不同用户下发的任务并行执行,同时,为了避免对网站负载过重以及避免无谓的重复抓取,本发明实施例中,采用相同网站串行执行法进行任务的爬取,即在同一时刻针对同一网站的抓取任务只允许有一个爬虫在执行。
[0053]具体的,由于不同任务中包含有相同的网站,经过运算会映射到相同的爬虫上。如果爬虫对此网站已经开始信息采集工作,为了保证网站的负载不至过重,后续的任务将处于阻塞状态除非前一工作已经完成,即“相同的网站串行执行”。
[0054]由于是并行爬虫,不可避免的会遇到爬虫加入退出的情况,本发明实施例根据分配算法减少爬虫节点增减时的任务重新分配。
[0055]本发明实施例中,爬虫的任务分配算法可以采用Hash算法的思想,即每一个URL经过Hash函数计算得哈希值,不同的哈希值对应不同的爬虫,将URL交给Hash函数计算出的爬虫处理。具体处理方法如下:若最初有20个爬虫处于等待状态,那么一个可能的Hash函数方案为:
[0056]Keyi = Transfer(host (URLi))mod20
[0057]host O函数取每一个URL的主机地址。如对http://sport, qq.com/使用host()函数的得到http://www.qq.com.这样的取值可以使一个服务其上的所有文档由一个爬虫下载并存储。TransferO函数对主机地址进行计算:将host O函数得到的字符串的每一个字符转化为相应的整数并累加,最后对20取模,得到Keyi值。Keyi取值为0_19,分别对应20个处于等待状态的爬虫,URLi根据以上Hash函数计算出对应的爬虫并将任务传递给该对应爬虫进行处理。
[0058]本发明实施例中,当爬虫服务器因为某种原因出现了故障之后,在爬虫再次重启之后,爬虫能够智能的判断爬虫上次任务的状态,根据任务的状态继续爬取没有爬完的链接地址。
[0059]为实现上述目的,本发明实施例中,在执行任务过程中,为每个爬虫线程的处理进度保存状态,每取一批网页都要记录本线程最大的网页ID,记录到数据库里,进程重启后可以读取这个ID,从而恢复爬虫系统的爬取环境,接着抓取后面的页面。
[0060]本发明实施例中,在爬虫一个节点上采用多线程同步1/0或者单线程异步1/0以实现并行爬取。由于本发明实施例采用分布式网络爬虫方案,因而通过总线控制,可以实现多个网络爬虫并行爬取,从而有效的保证网络爬虫的爬取性能。但由于多机并行爬取的分布式网络爬虫系统需要考虑各节点之间的通信和调度,因此,在一个爬虫节点上采用多线程同步I/o或者单线程异步1/0以实现并行爬取。
[0061]在采用本发明实施例的方法进行工作时,可采用下述的系统结构进行,如一台中央主机,多台负责爬行网页爬虫机器,并且只与中央主机通信。中央主机从一个文件里读取URL,并把他们分发给爬虫机器的Crawler进程。爬虫采用异步1/0同时从若干个网站上获取数据。所有的Crawler将下载来的HTML页面压缩并存放在磁盘上,然后索引器进程从所述HTML页面中将URL提取出来并存放在另一个磁盘文件中,URL解析器进程读取这个存放链接的文件,将其中的相对链接转化为绝对链接,然后存入一个文件供中央主机读取。
[0062]本发明基于用户设定的互联网对象,根据用户创建的任务,从互联网爬取对应的资源、过滤URL并进行存储,实现有针对性的对互联网信息进行采集;同时,本发明能够实现多机并行爬取、多任务调度、断点续抓、分布式爬虫管理以及爬虫控制。
[0063]以上所述仅是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【权利要求】
1.一种基于网页爬取的爬虫技术,其特征在于,初始化URL链接地址后,包括以下步骤:1)均衡分配爬虫线程从给定的入口起在运行队列读取排列在队首的URL链接地址; 2)判断所述URL链接地址是否存在,是则停止爬取,否则,爬取所述URL链接地址放入完成队列; 3)对放入所述完成队列的所述URL链接地址对应的网页进行提取; 4)对所述提取的网页中的URL链接地址过滤,留取有效URL链接地址写入运行队列,返回步骤I)重复以上步骤。
2.根据权利要求1所述一种基于网页爬取的爬虫技术,其特征在于,当所述排列在队首的URL长度超过预设阈值时,所述爬虫线程停止对所述对排列在队首的URL进行爬取。
3.根据权利要求1或2所述一种基于网页爬取的爬虫技术,其特征在于,所述爬虫线程从运行队列爬取排列在队首的URL时,采取广度优先法进行爬取,即先从所述URL的起始网页开始,抓取所述起始网页中所有链接的网页,然后从抓取的所述所有链接的网页中再选择一个网页,抓取所述选择的网页中的所有链接页面,直至所述所有链接的网页中所有网页中的所有链接页面全部抓取完毕。
4.根据权利要求1所述一种基于网页爬取的爬虫技术,其特征在于,所述步骤2)中,所述爬取所述URL链接地址的具体步骤如下: 爬虫线程开启后,首先由中心爬虫将待爬取的起始页URL链接地址读取到爬虫缓存,然后根据爬取优先顺序对放入到所述爬虫缓存中所述起始页URL链接地址中的内容进行抓取、解析、抽取所述内容中的详细URL链接地址放入URL存储容器中,最后将抽取到的详细URL链接地址进行再次爬取。
5.根据权利要求4所述一种基于网页爬取的爬虫技术,其特征在于,所述对抽取的详细URL链接地址进行抽取时,对抽取到的所述详细URL链接地址进行去重、增量操作,以免出现重复爬取同一个详细URL网址的情况。
6.根据权利要求4所述一种基于网页爬取的爬虫技术,其特征在于,所述对抽取到的详细URL链接地址进行抽取的步骤如下: A、从所述URL存储容器中读取待爬取的详细URL链接地址,并对所述详细URL链接地址进行正确性校验,将校验正确的待爬取详细URL链接地址放入爬虫缓存中; B、从互联网中爬取指定详细URL链接地址,将爬取到的网页信息内容进行相应解码、解压缩; C、解析爬取到的所述网页信息,抽取出网页中的URL链接地址,并对所述网页中的URL链接地址进行校验、去重操作;然后重复以上步骤A-C。
7.根据权利要求1所述一种基于网页爬取的爬虫技术,其特征在于,所述爬虫线程从给定的入口起在运行队列读取排列在队首的URL链接地址的步骤之前,还包括以下步骤: 在接收任务请求后,把任务拆分成任务分片,每个任务分片仅包含一个网站,每个任务分片均衡分配给由多个爬虫并行执行。
8.根据权利要求1所述一种基于网页爬取的爬虫技术,其特征在于,在爬虫线程执行任务过程中,为每个爬虫线程的处理进度保存状态,每取一批网页都要记录本线程最大的网页ID,记录到数据库里,进程重启后读取IDID,恢复爬虫系统的爬取环境,接着抓后面的页面。
9.根据权利要求1所述一种基于网页爬取的爬虫技术,其特征在于,采用Hash算法均衡分配爬虫线程的任务,即每一个URL经过Hash函数计算得哈希值,不同的哈希值对应不同的爬虫,将一个URL交给Hash函数计算出的对应爬虫进行处理。
【文档编号】G06F17/30GK103970788SQ201310040090
【公开日】2014年8月6日 申请日期:2013年2月1日 优先权日:2013年2月1日
【发明者】尹科 申请人:北京英富森信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1