一种大规模网络爬虫程序的访问方法及装置与流程

文档序号:14257614阅读:392来源:国知局

本发明涉及互联网大数据领域,更具体的涉及一种大规模网络爬虫程序的访问方法及装置。



背景技术:

大规模网络爬虫程序具有任务量大,任务类型多,数据源本身限制多等特点。网络爬虫程序是一个沿着链接漫游万维网文档集合的程序,一般驻留在服务器上,通过给定的一些url(英文为:uniformresourcelocator,简称,统一资源定位符),利用http(英文为:hypertexttransferprotocol,简称,超文本传输协议)等标准协议读取相应文档,然后以文档中包括的所有未访问过的url作为新的起点,继续进行漫游,直到没有满足条件的新url为止。网络爬虫程序的主要功能是自动从internet上的各万维网站点抓取万维网文档并从该万维网文档中提取一些信息来描述该万维网文档,为搜索引擎站点的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建立时间、html(英文为:hypertextmarkuplanguage,简称,超文本标记语言)文件中的各种链接数目等。

在某些以数据为中心的业务场景中,需要对大量数据进行采集和临时存储。这种类型的业务具有数据量大,数据多样性,数据源本身限制多等特点,经常需要对各种类型的数据进行不同爬虫程序的开发和管理,对于数据的解析和临时存储需要实现不同的处理逻辑,对于有些数据源还存在很多限制。例如:有些网站会对同一个ip固定时间内访问次数做限制,那么需要从此网站上进行大量数据的采集时需要突破这种频率限制来解决采集数量的问题。另外对于采集回来的网页需要进行不同逻辑的解析和临时存储,提取页面中一些信息,当这种类型的开发需求增多时,就会存在程序管理的问题。



技术实现要素:

本发明实施例提供一种大规模网络爬虫程序的访问方法及装置,用以解决大规模爬虫程序自身的性能和效率问题。

本发明实施例提供一种大规模网络爬虫程序的访问方法,包括:

通过分发调度层调度爬虫插件从网络端获取代理地址,将所述代理地址存储至数据表内;所述数据表包括数据类型和列名,且所述数据类型,所述列名分别与获取所述代理地址的网络端对应;

通过所述数据表内包括的所述代理地址依此访问设定的网页,若成功访问则确定所述代理地址为第一代理地址,并在所述数据表内进行标记;按照设定的时间将所述第一代理地址加载到缓存队列中;

所述爬虫插件通过轮循所述第一代理地址,访问数据源。

优选地,所述分发调度层包括muti方式和dispatch模式;

所述muti方式提供多线程,且多个所述线程同时执行所述爬虫插件的实现;

所述dispatch模式从多个所述线程组成的线程池内获取一个所述线程用于获取爬虫任务并将所述爬虫任务分发给所述线程池内的多个所述线程,以使多个所述线程执行与所述爬虫任务对应的所述爬虫插件的实现。

优选地,所述爬虫插件包括周期任务型插件和网页爬虫型插件;

所述周期任务型插件用于在设定时间内周期扫描,所述网页爬虫型插件用于执行爬取。

优选地,所述通过分发调度层调度爬虫插件从网络端获取代理地址之前,还包括:

收到所述爬虫插件时,在超时管理中添加一个事件备忘时间,当所述事件备忘时间与当前时间差大于超时阈值时,将所述爬虫插件重新添加到缓存队列中;所述分发调度层从所述缓存队列内按照入队顺序调度所述爬虫插件。

优选地,所述通过所述数据表内包括的所述代理地址依此访问设定的网页,若成功访问则确定所述代理地址为第一代理地址,具体包括:

调度程序按照检测时间加载所述数据库内包括的多个所述代理地址,将多个所述代理地址作为任务参数发送到多个不同的消息队列中;

多个不同的所述消息队列内的所述任务参数访问设定的网页,并将访问结果反馈给所述调度程序。

本发明实施例还提供一种大规模网络爬虫程序的访问装置,包括:

获取单元,用于通过分发调度层调度爬虫插件从网络端获取代理地址,将所述代理地址存储至数据表内;所述数据表包括数据类型和列名,且所述数据类型,所述列名分别与获取所述代理地址的网络端对应;

确定单元,用于通过所述数据表内包括的所述代理地址依此访问设定的网页,若成功访问则确定所述代理地址为第一代理地址,并在所述数据表内进行标记;按照设定的时间将所述第一代理地址加载到缓存队列中;

访问单元,用于所述爬虫插件通过轮循所述第一代理地址,访问数据源。

优选地,所述分发调度层包括muti方式和dispatch模式;

所述muti方式提供多线程,且多个所述线程同时执行所述爬虫插件的实现;

所述dispatch模式从多个所述线程组成的线程池内获取一个所述线程用于获取爬虫任务并将所述爬虫任务分发给所述线程池内的多个所述线程,以使多个所述线程执行与所述爬虫任务对应的所述爬虫插件的实现。

优选地,所述爬虫插件包括周期任务型插件和网页爬虫型插件;

所述周期任务型插件用于在设定时间内周期扫描,所述网页爬虫型插件用于执行爬取。

优选地,所述获取单元还用于:

收到所述爬虫插件时,在超时管理中添加一个事件备忘时间,当所述事件备忘时间与当前时间差大于超时阈值时,将所述爬虫插件重新添加到缓存队列中;所述分发调度层从所述缓存队列内按照入队顺序调度所述爬虫插件。

优选地,所述确定单元具体用于:

调度程序按照检测时间加载所述数据库内包括的多个所述代理地址,将多个所述代理地址作为任务参数发送到多个不同的消息队列中;

多个不同的所述消息队列内的所述任务参数访问设定的网页,并将访问结果反馈给所述调度程序。

本发明实施例中,提供了一种大规模网络爬虫程序的访问方法,包括:通过分发调度层调度爬虫插件从网络端获取代理地址,将所述代理地址存储至数据表内;所述数据表包括数据类型和列名,且所述数据类型,所述列名分别与获取所述代理地址的网络端对应;通过所述数据表内包括的所述代理地址依此访问设定的网页,若成功访问则确定所述代理地址为第一代理地址,并在所述数据表内进行标记;按照设定的时间将所述第一代理地址加载到缓存队列中;所述爬虫插件通过轮循所述第一代理地址,访问数据源。上述方法中,通过分发调度层以及爬虫插件采集了大量的代理地址,将获取到的代理地址进行存储和检测,从而提高的代理地址的使用效率,进一步地,爬虫插件通过轮循第一代理地址的方式,可以访问数据源。从而实现了代理地址的管理和实用,爬虫程序的开发和管理等问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种大规模网络爬虫程序的访问方法流程示意图;

图2为本发明实施例提供的ce所在总集群结构示意图;

图3为本发明实施例提供的爬虫插件多线程的执行时序和超时管理示意图;

图4为本发明实施例提供的一种大规模网络爬虫程序的访问装置结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

专业术语解释

代理:英文为proxy,指http协议的代理中转服务器,代理地址是由ip和端口构成,代理根据所在的网络位置不同区分为正向代理和反向代理,在本发明实施例中所涉及到的代理均为正向代理。

爬虫引擎:英文为crawlingengine,缩写为ce,是一种针对网络数据采集的插件引擎,支持针对网络数据采集的扩展开发,是一种爬虫所使用的资源池,更像一个爬虫容器,用来调度和管理各种爬虫程序。ce职责单一,只为解决纯粹的业务问题。

图1示例性的示出了本发明实施例提供的一种大规模网络爬虫程序的访问方法流程示意图。如图1所示,该方法主要包括以下步骤:

步骤101,通过分发调度层调度爬虫插件从网络端获取代理地址,将所述代理地址存储至数据表内;所述数据表包括数据类型和列名,且所述数据类型,所述列名分别与获取所述代理地址的网络端对应;

步骤102,通过所述数据表内包括的所述代理地址依此访问设定的网页,若成功访问则确定所述代理地址为第一代理地址,并在所述数据表内进行标记;按照设定的时间将所述第一代理地址加载到缓存队列中;

步骤103,所述爬虫插件通过轮循所述第一代理地址,访问数据源。

在介绍本发明实施例提供的一种大规模网络爬虫程序的访问方法之前,需要先介绍ce的应用场景以及ce的总体架构。

图2为本发明实施例提供的ce所在总集群结构示意图,如图2所示,在从appserver1到appservern是ce服务,依赖于redis服务器和mysql数据存储服务器。ce在进行爬网页数据采集时可以通过3种方式进行访问数据源:

1、直接访问,使用数据中心提供的公网ip进行出访;

2、共享代理,本文中通过采集大量的公共代理地址提供ce访问外部网页;

3、多线路拨号访问,这一部分通过模拟多个线路进行拨号,通过内网代理地址进行负载均衡,这一部分已经超出了本人的范围,所以不在说明;

ce通过配置文件加载多个爬虫插件和定时插件进行工作,爬虫插件作为消费者会监听已经配置的redis消息队列,将爬取到的结果存储在临时数据缓冲区mysql中。业务系统管理后台负责控制appserver,redis和mysql临时数据缓冲区并提供数据的展示界面。

本发明实施例提供的ce的总体框架主要包括以下作业管理框架,分发调度层,爬虫抽象层和插件实现爬虫业务逻辑。

具体地,作业管理框架,用来管理和提交并行任务和爬虫程序完成后的合并处理逻辑。

分发调度层:对于网页爬虫插件的实现提供了两种类型的调度方式,根据不同的任务特点进行定制配置使用。

muti方式提供了一个多线程执行同样逻辑的过程,包括获取任务,爬网页,解析网页,临时存储等。

dispatch模式从多个线程构建的线程池中拿出一个线程用来获取任务并将任务在内存中分发给其余的多个线程,其余的多个线程进行爬网页,解析网页,临时存储。

一般muti模型适合于任务量较少,比较轻的任务或单线程任务。dispatch适合于大规模任务,允许一定数量失败的多线程任务。

爬虫抽象层ce在实现时提供了两种类型的插件:周期任务型和网页爬虫型。

周期任务型插件主要是提供了在配置的固定时间内周期性执行插件开发者提供的一段逻辑代码的能力,主要是用于定时扫描。插件通过继承scheduleproviderbase实现。

网页爬虫型插件主要是提供了爬虫程序针对某些网站页面的爬取,解析,临时存储等逻辑实现的能力,主要用来实现任务的爬取。插件通过继承httpproxycrawlingproviderbase实现。

插件实现爬虫业务逻辑:可以根据不同的业务实现不同的爬虫并针对插件进行定制化配置,包括线程数,周期时间,是否启用代理模块等。其中proxy模块是提供代理地址的整个流程驱动的多种插件集合。同时ce框架提供了针对爬虫的性能计数器的实现,用来监控各种爬虫程序运行性能。性能计数器可通过已经启动的ce进行的一个http端口打印输出到web页面中。

图3为本发明实施例提供的爬虫插件多线程的执行时序和超时管理示意图,如图3所示,由于爬虫程序的网络请求和解析的代码由业务开发人员提供和网络不稳定等原因在代码执行时可能会出现各种阻塞,一旦阻塞发生会占用线程资源,所有线程耗尽时消息队列中的任务就会无法处理,所以ce提供了一种超时管理的方案解决这个问题。通过java线程池提交任务时返回的future对象,每次执行一次网络请求时都会产生一个future对象并将其保存在超时管理器中,超时管理器中有一个单独的线程用来循环扫描超时的future对象,如果超过预先设定的时间,则将阻塞的线程杀死并回收保存在超时管理器中的任务对象,同时将任务对象重新推入redis消息队列的尾部,这样可以保证没有及时处理的任务不会丢失并且回避了所有线程假死的风险。

在步骤101中,通过分发调度层调度爬虫插件,使得爬虫插件从网络端获取到代理地址。需要说明的是,分发调度层主要包括muti方式和dispatch模式;其中,muti方式提供多线程,且多个线程可以同时执行爬虫插件的实现,包括获取任务,爬网页,解析网页,临时存储等;dispatch模式从多个线程组成的线程池内获取一个线程用于获取爬虫任务并将爬虫任务分发给线程池内的多个线程,多个线程执行与爬虫任务对应的爬虫插件的实现。其中爬虫插件的实现包括获取任务,爬网页,解析网页,临时存储等。

再者,本发明实施例中的爬虫插件包括周期任务型插件和网页爬虫型插件;其中,周期任务型插件用于在设定时间内周期扫描,即在设定时间内周期性执行插件开发者提供的一段逻辑代码的能力,比如,周期任务型插件通过继承scheduleproviderbase实现。网页爬虫型插件用于执行爬取,即爬虫程序针对某些网站页面的爬取,解析,临时存储等逻辑实现的能力,比如网页爬虫型插件通过继承httpproxycrawlingproviderbase实现。

进一步的,在本发明实施例中,考虑到爬虫程序的网络请求和解析的代码由业务开发人员提供和网络不稳定等原因在代码执行时可能会出现各种阻塞,一旦阻塞发生会占用线程资源,所有线程耗尽时消息队列中的任务就会无法处理。本发明实施例中,在收到爬虫插件时,会在超时管理中添加一个事件备忘时间,而超时管理中或设置一个单独的线程来循环扫描事件备忘时间,当事件备忘时间与当前时间之间的差值大于超时阈值时,可以确定该事件备忘时间对应的爬虫插件还没有从网络端获取到代理地址,即爬虫插件获取代理地址的时间超过超时阈值,需要对爬虫插件进行处理。一方面,可以将该爬虫插件对应的线程杀死并将该爬虫插件回收保存到超时管理器中;另一方面,将该爬虫插件重新添加到缓存消息队列的尾部。上述方法可以保证没有及时处理的爬虫插件不会丢失且回避了所有线程假死的风险。

进一步地,当事件备忘时间与当前时间之间的差值小于超时阈值时,则可以确定该爬虫插件还在从网络端获取代理地址,则不需要对该爬虫插件进行任何处理。

在步骤101中,网络端包括有第三方提供的api接口,还包括有服务站点,即,爬虫插件即可以从第三方提供的api接口获取到代理地址,还可以派爬虫到提供的服务站点上去采集代理地址,在本发明实施例中,对网络端的具体类型不做限定。

比如,kuaiapi和youcrawler都是以业务插件的形式运行在ce环境中。

将获取到的代理地址存储到数据表内,比如,如采集到的代理地址为kuaiapi和youcrawler,则需要将kuaiapi和youcrawler存储到数据表内。

需要说明的是,在实际应用中,需要根据数据表包括的数据类型和列名,将代理地址依此添加到数据表内。

表1为本发明实施例提供的数据表,如表1所示:

表1数据表

在步骤102中,由于通过爬虫插件从网络端获取到的代理地址的数量有上百条,而上百条代理地址中只有少量的可用的代理地址,为了避免获取到的代理地址存在不可以用的问题,在本发明实施例中,需要对获取到的代理地址进行检测,通过检测,选择可以使用的代理地址。

具体地,调度程序按照设定的检测时间从数据表内加载多个代理地址,将多个代理地址作为任务参数分别发送到具有不同命名的多个消息队列中,作为消费者的多个checker采用多线程负责,使得任务参数访问设定的比较简单的网页,若此次访问成功,则说明该代理地址可用,若访问不成功,则说明该代理地址不可用。

在本发明实施例中,将可以使用的代理地址确认为第一代理地址,并且会在数据表内进行标记,比如,若可以用,则在数据表中将state标记为1,否则会标记为0。

在步骤103中,将确认的第一代理地址加载到缓存队列内,在具体应用中,需要使用代理地址的爬虫插件采用循环队列的方式轮循代理地址,从而可以访问到数据源。

综上所述,本发明实施例提供了一种大规模网络爬虫程序的访问方法,上述方法中,通过分发调度层以及爬虫插件采集了大量的代理地址,将获取到的代理地址进行存储和检测,从而提高的代理地址的使用效率,进一步地,爬虫插件通过轮循第一代理地址的方式,可以访问数据源。从而实现了代理地址的管理和实用,爬虫程序的开发和管理等问题。

基于同一发明构思,本发明实施例提供了一种大规模网络爬虫程序的访问装置,由于该装置解决技术问题的原理与一种大规模网络爬虫程序的访问方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。

图4为本发明实施例提供的一种大规模网络爬虫程序的访问装置结构示意图。如图4所示,该装置包括:获取单元401,确定单元402和访问单元403。

获取单元401,用于通过分发调度层调度爬虫插件从网络端获取代理地址,将所述代理地址存储至数据表内;所述数据表包括数据类型和列名,且所述数据类型,所述列名分别与获取所述代理地址的网络端对应;

确定单元402,用于通过所述数据表内包括的所述代理地址依此访问设定的网页,若成功访问则确定所述代理地址为第一代理地址,并在所述数据表内进行标记;按照设定的时间将所述第一代理地址加载到缓存队列中;

访问单元403,用于所述爬虫插件通过轮循所述第一代理地址,访问数据源。

优选地,所述分发调度层包括muti方式和dispatch模式;

所述muti方式提供多线程,且多个所述线程同时执行所述爬虫插件的实现;

所述dispatch模式从多个所述线程组成的线程池内获取一个所述线程用于获取爬虫任务并将所述爬虫任务分发给所述线程池内的多个所述线程,以使多个所述线程执行与所述爬虫任务对应的所述爬虫插件的实现。

优选地,所述爬虫插件包括周期任务型插件和网页爬虫型插件;

所述周期任务型插件用于在设定时间内周期扫描,所述网页爬虫型插件用于执行爬取。

优选地,所述获取单元401还用于:

收到所述爬虫插件时,在超时管理中添加一个事件备忘时间,当所述事件备忘时间与当前时间差大于超时阈值时,将所述爬虫插件重新添加到缓存队列中;所述分发调度层从所述缓存队列内按照入队顺序调度所述爬虫插件。

优选地,所述确定单元402具体用于:

调度程序按照检测时间加载所述数据库内包括的多个所述代理地址,将多个所述代理地址作为任务参数发送到多个不同的消息队列中;

多个不同的所述消息队列内的所述任务参数访问设定的网页,并将访问结果反馈给所述调度程序。

应当理解,以上一种大规模网络爬虫程序的访问装置包括的单元仅为根据该设备装置实现的功能进行的逻辑划分,实际应用中,可以进行上述单元的叠加或拆分。并且该实施例提供的一种大规模网络爬虫程序的访问装置所实现的功能与上述实施例提供的一种大规模网络爬虫程序的访问方法一一对应,对于该装置所实现的更为详细的处理流程,在上述方法实施例一中已做详细描述,此处不再详细描述。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1