网页内容爬取的方法和装置转让专利

申请号 : CN201610350395.7

文献号 : CN105956175B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孔祥旭张泽斌周勇

申请人 : 考拉征信服务有限公司

摘要 :

本公开提供一种网页内容爬取的方法和装置,包括:调度爬取任务;当查询到所述爬取任务有代理设置时,获取代理IP队列;进行资源管理处理;由数据抓取引擎采用多线程并行处理的方式进行数据抓取;各个线程对各自所抓取的数据交由解析引擎进行数据解析,并对解析数据进行持久化操作。本公开所述解决了一般网页和需要登录的网站的各个功能的爬取工作,爬取的任务由爬取组件完成,且实现了快速准确,同时还能够分析出目标网站的层级关系,形成清晰的爬取目标结构图,为爬取的数据建立起清晰的关系,通过反监控管理实现了反爬技术,为最终得到目标数据扫清了障碍。

权利要求 :

1.一种网页内容爬取的方法,其特征在于,包括:调度爬取任务;

当查询到所述爬取任务有代理设置时,获取代理IP队列;

进行资源管理处理;

由数据抓取引擎采用多线程并行处理的方式进行数据抓取;

各个线程对各自所抓取的数据交由解析引擎进行数据解析,并对解析数据进行持久化操作;

其中,所述当查询到所述爬取任务有代理设置时,获取代理IP队列的步骤包括:判断所述爬取任务是否需要设置代理IP;

如果需要设置代理IP,则从配置表中查询针对当前系统已配置的代理IP地址队列;

从所述已配置的代理IP地址队列中取出一个IP地址;

检测取出的IP地址是否能够爬取通过,如果能够通过则即为找到有效IP;

按照队列顺序采用轮循方式取出下一个IP地址进行检测,所有爬取通过的有效IP构成所述代理IP队列,以便对网页内容进行爬取。

2.根据权利要求1所述的方法,其特征在于,根据预设的时间周期定时地调度所述爬取任务。

3.根据权利要求1所述的方法,其特征在于,通过模拟用户登录进行资源管理处理,包括初始化cookie信息,具体包括:判断是否存在已有的cookie,如果存在已有的cookie则进一步判断所述已有的cookie是否有效;

如果没有所述已有的cookie或者所述已有的cookie已失效,则重新生成cookie。

4.根据权利要求3所述的方法,其特征在于,还包括:如果所述已有的cookie仍有效,则使用所述已有的cookie或重新生成的cookie来获取图片验证码,当图片验证获取成功后组织登录参数;

动态拼装所述登录参数后请求登录接口,如果通过所述登录接口能够成 功登录则更新所述已有的cookie,如果未能成功登录则判断是否继续登录,如果继续登录则重新所述初始化cookie信息。

5.根据权利要求1所述的方法,其特征在于,所述进行数据抓取包括:模拟浏览器打开目标网站;

判断是否成功打开所述目标网站,如果没有打开则结束;

如果成功打开则获取所述目标网站上的所有表单控件,并进行逐一赋值后提交表单数据;

加载JS请求,并根据所述JS请求返回JSON格式数据。

6.根据权利要求1所述的方法,其特征在于,所述解析引擎结合解析规则针对不同类型的返回数据进行数据解析,所述返回数据的类型包括JSON格式数据、HTML格式数据以及通过JS动态加载得到的数据。

7.根据权利要求1所述的方法,其特征在于,所述方法还包括:进行数据结构化操作,从数据源中抽取出所需的数据,经过数据清洗,并按照预先定义好的数据模型,将清洗后的数据加载到数据模型中。

8.一种网页内容爬取的装置,其特征在于,包括:任务调度模块,用于调度爬取任务;

代理IP模块,用于当查询到所述爬取任务有代理设置时,获取代理IP队列;

资源管理模块,用于进行资源管理处理;

数据抓取模块,用于由数据抓取引擎采用多线程并行处理的方式进行数据抓取;

数据持久化模块,用于各个线程对各自所抓取的数据交由解析引擎进行数据解析,并对解析数据进行持久化操作;

其中,所述代理IP模块包括:

判断子模块,用于判断所述爬取任务是否需要设置代理IP;

查询子模块,用于当所述判断子模块的判断结果为需要设置代理IP时,从配置表中查询针对当前系统已配置的代理IP地址队列;

取出IP地址子模块,用于从所述已配置的代理IP地址队列中取出一个IP地址;

检测子模块,用于检测取出的IP地址是否能够爬取通过,如果能够通过 则即为找到有效IP;

轮循子模块,用于按照队列顺序采用轮循方式取出下一个IP地址进行检测,所有爬取通过的有效IP构成所述代理IP队列,以便对网页内容进行爬取。

9.根据权利要求8所述的装置,其特征在于,所述任务调度模块根据预设的时间周期定时地调度所述爬取任务。

10.根据权利要求8所述的装置,其特征在于,所述资源管理模块包括:初始化子模块,用于初始化cookie信息,判断是否存在已有的cookie,如果存在已有的cookie则进一步判断所述已有的cookie是否有效;当没有所述已有的cookie或者所述已有的cookie已失效时,重新生成cookie。

11.根据权利要求10所述的装置,其特征在于,所述资源管理模块还包括:图片验证子模块,用于当所述已有的cookie仍有效时,使用所述已有的cookie或重新生成的cookie来获取图片验证码,当图片验证获取成功后组织登录参数;动态拼装所述登录参数后请求登录接口,如果通过所述登录接口能够成功登录则更新所述已有的cookie,如果未能成功登录则判断是否继续登录,如果继续登录则重复所述初始化子模块。

12.根据权利要求8所述的装置,其特征在于,所述数据抓取模块包括:模拟打开网站子模块,用于模拟浏览器打开目标网站;

打开成功判断子模块,用于判断是否成功打开所述目标网站,如果没有打开则结束;如果成功打开则转至提交表单数据子模块;

提交表单数据子模块,用于获取所述目标网站上的所有表单控件,并进行逐一赋值后提交表单数据;

加载JS请求子模块,用于加载JS请求,并根据所述JS请求返回JSON格式数据。

13.根据权利要求8所述的装置,其特征在于,所述数据持久化模块通过解析引擎结合解析规则针对不同类型的返回数据进行数据解析,所述返回数据的类型包括JSON格式数据、HTML格式数据以及通过JS动态加载得到的数据。

14.根据权利要求8所述的装置,其特征在于,所述装置还包括:数据结构化模块,用于进行数据结构化操作,从数据源中抽取出所需的数据,经过数据清洗,并按照预先定义好的数据模型,将清洗后的数据加载到数据模型中。

说明书 :

网页内容爬取的方法和装置

技术领域

[0001] 本公开总体涉及网页技术领域,具体而言,涉及一种网页内容爬取的方法和装置。

背景技术

[0002] 近年来,随着Web信息爆炸式的增长,如何有效的在Web中获取有用的信息已变得极其困难。目前互联网网站爬虫技术在丰富公司数据、获取多源数据中扮演着重要的作用,同时爬虫技术也是数据挖掘不可缺少的工具。其中爬虫技术在搜索引擎领域应用非常广泛,但是随着网络变得越来越复杂,这些通用的搜索引擎有时也会在信息领航中也会迷失方向,所以将爬虫技术仅仅应用于搜索引擎方向还是远远不够的。
[0003] 对于一个大规模的网页内容爬取系统,常用的几种通过网页爬虫进行爬取的策略各有优缺点,网络爬虫也面临两个问题:一是网络爬虫需要解决的技术问题;二是网络爬虫存在的局限性。
[0004] 为了高效的对页面进行抓取,在进行并行抓取的同时,保证各进程间通信的问题,让各个组件之间进行高效的工作。URL的调度技术在网络爬虫系统的设计中起着关键的作用,提出了基于概率模型的启发示度量规则,使网络系统具有更加智能的路由功能,以便于始终可以向着用户设定的主题进行页面获取。基网络爬虫系统基于概率模型的启发示度量规则,另外还基于最佳优先搜索的隧道技术,用于克服对某个主题在进行抓取多次后,如果偏离了原先的主题,可以让其迅速停止工作,从而在URL队列中选取下一个URL作为下一次的页面抓取出发点。
[0005] 但是,现在爬虫技术大部分是针对互联网上单个网页的爬取,遇到需要登录后才能查询相关信息的网站就无法进行爬取。
[0006] 因此,需要一种新的网页内容爬取的方法和装置。
[0007] 在所述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。

发明内容

[0008] 本公开提供一种网页内容爬取的方法和装置,以解决现有技术中对于需要登录后才能查询相关信息的网站取法进行爬取的技术问题。
[0009] 本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
[0010] 根据本公开的一方面,提供一种网页内容爬取的方法,包括:
[0011] 调度爬取任务;
[0012] 当查询到所述爬取任务有代理设置时,获取代理IP队列;
[0013] 进行资源管理处理;
[0014] 由数据抓取引擎采用多线程并行处理的方式进行数据抓取;
[0015] 各个线程对各自所抓取的数据交由解析引擎进行数据解析,并对解析数据进行持久化操作。
[0016] 根据本公开的一实施方式,根据预设的时间周期定时地调度所述爬取任务。
[0017] 根据本公开的一实施方式,所述当查询到所述爬取任务有代理设置时,获取代理IP队列的步骤包括:
[0018] 判断所述爬取任务是否需要设置代理IP;
[0019] 如果需要设置代理IP,则从配置表中查询针对当前系统已配置的代理IP地址队列;
[0020] 从所述已配置的代理IP地址队列中取出一个IP地址;
[0021] 检测取出的IP地址是否能够爬取通过,如果能够通过则即为找到有效IP;
[0022] 按照队列顺序采用轮循方式取出下一个IP地址进行检测,所有爬取通过的有效IP构成所述代理IP队列,以便对网页内容进行爬取。
[0023] 根据本公开的一实施方式,通过模拟用户登录进行资源管理处理,包括初始化cookie信息,具体包括:
[0024] 判断是否存在已有的cookie,如果存在已有的cookie则进一步判断所述已有的cookie是否有效;
[0025] 如果没有所述已有的cookie或者所述已有的cookie已失效,则重新生成cookie。
[0026] 根据本公开的一实施方式,还包括:
[0027] 如果所述已有的cookie仍有效,则使用所述已有的cookie或重新生成的cookie来获取图片验证码,当图片验证获取成功后组织登录参数;
[0028] 动态拼装所述登录参数后请求登录接口,如果通过所述登录接口能够成功登录则更新所述已有的cookie,如果未能成功登录则判断是否继续登录,如果继续登录则重新所述初始化cookie信息。
[0029] 根据本公开的一实施方式,所述进行数据抓取包括:
[0030] 模拟浏览器打开目标网站;
[0031] 判断是否成功打开所述目标网站,如果没有打开则结束;
[0032] 如果成功打开则获取所述目标网站上的所有表单控件,并进行逐一赋值后提交表单数据;
[0033] 加载JS请求,并根据所述JS请求返回JSON格式数据。
[0034] 根据本公开的一实施方式,所述解析引擎结合解析规则针对不同类型的返回数据进行数据解析,所述返回数据的类型包括JSON格式数据、HTML格式数据以及通过JS动态加载得到的数据。
[0035] 根据本公开的一实施方式,所述方法还包括:
[0036] 进行数据结构化操作,从数据源中抽取出所需的数据,经过数据清洗,并按照预先定义好的数据模型,将清洗后的数据加载到数据模型中。
[0037] 根据本公开的再一方面,还提供一种网页内容爬取的装置,包括:
[0038] 任务调度模块,用于调度爬取任务;
[0039] 代理IP模块,用于当查询到所述爬取任务有代理设置时,获取代理IP队列;
[0040] 资源管理模块,用于进行资源管理处理;
[0041] 数据抓取模块,用于由数据抓取引擎采用多线程并行处理的方式进行数据抓取;
[0042] 数据持久化模块,用于各个线程对各自所抓取的数据交由解析引擎进行数据解析,并对解析数据进行持久化操作。
[0043] 根据本公开的一实施方式,所述任务调度模块根据预设的时间周期定时地调度所述爬取任务。
[0044] 根据本公开的一实施方式,所述代理IP模块包括:
[0045] 判断子模块,用于判断所述爬取任务是否需要设置代理IP;
[0046] 查询子模块,用于当所述判断子模块的判断结构为需要设置代理IP时,从配置表中查询针对当前系统已配置的代理IP地址队列;
[0047] 取出IP地址子模块,用于从所述已配置的代理IP地址队列中取出一个IP地址;
[0048] 检测子模块,用于检测取出的IP地址是否能够爬取通过,如果能够通过则即为找到有效IP;
[0049] 轮循子模块,用于按照队列顺序采用轮循方式取出下一个IP地址进行检测,所有爬取通过的有效IP构成所述代理IP队列,以便对网页内容进行爬取。
[0050] 根据本公开的一实施方式,所述资源管理模块包括:
[0051] 初始化子模块,用于初始化cookie信息,判断是否存在已有的cookie,如果存在已有的cookie则进一步判断所述已有的cookie是否有效;当没有所述已有的cookie或者所述已有的cookie已失效时,重新生成cookie。
[0052] 根据本公开的一实施方式,所述资源管理模块还包括:
[0053] 图片验证子模块,用于当所述已有的cookie仍有效时,使用所述已有的cookie或重新生成的cookie来获取图片验证码,当图片验证获取成功后组织登录参数;动态拼装所述登录参数后请求登录接口,如果通过所述登录接口能够成功登录则更新所述已有的cookie,如果未能成功登录则判断是否继续登录,如果继续登录则重复所述初始化子模块。
[0054] 根据本公开的一实施方式,所述数据抓取模块包括:
[0055] 模拟打开网站子模块,用于模拟浏览器打开目标网站;
[0056] 打开成功判断子模块,用于判断是否成功打开所述目标网站,如果没有打开则结束;如果成功打开则转至提交表单数据子模块;
[0057] 提交表单数据子模块,用于获取所述目标网站上的所有表单控件,并进行逐一赋值后提交表单数据;
[0058] 加载JS请求子模块,用于加载JS请求,并根据所述JS请求返回JSON格式数据。
[0059] 根据本公开的一实施方式,所述数据持久化模块通过解析引擎结合解析规则针对不同类型的返回数据进行数据解析,所述返回数据的类型包括JSON格式数据、HTML格式数据以及通过JS动态加载得到的数据。
[0060] 根据本公开的一实施方式,所述装置还包括:
[0061] 数据结构化模块,用于进行数据结构化操作,从数据源中抽取出所需的数据,经过数据清洗,并按照预先定义好的数据模型,将清洗后的数据加载到数据模型中。
[0062] 根据本公开的技术方案,能够得到以下技术效果:
[0063] 本公开所述解决了一般网页和需要登录的网站的各个功能的爬取工作,爬取的任务由爬取组件完成,且实现了快速准确,同时还能够分析出目标网站的层级关系,形成清晰的爬取目标结构图,为爬取的数据建立起清晰的关系,通过反监控管理实现了反爬技术,为最终得到目标数据扫清了障碍。
[0064] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。

附图说明

[0065] 通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。
[0066] 图1示出根据本公开一实施例中提供的一种网页内容爬取的方法的步骤流程图。
[0067] 图2示出根据本公开一实施例获取代理IP队列的步骤流程图。
[0068] 图3示出根据本公开一实施例动态代理IP设置以及轮循的步骤由反监控组件完成的原理示意图。
[0069] 图4示出根据本公开一实施例模拟用户登录的步骤流程图。
[0070] 图5示出根据本公开一实施例中模拟用户登录流程的原理示意图。
[0071] 图6示出根据本公开一实施例中进行抓取数据的步骤流程图。
[0072] 图7示出根据本公开另一实施例中提供的一种网页内容爬取的方法的步骤流程图。
[0073] 图8示出实现本公开实施例提供的网页内容爬取的方法的平台的总体架构图。
[0074] 图9示出图8所示平台的功能组件图。
[0075] 图10示出根据本公开实施例提供的平台中检索引擎工作的原理示意图。
[0076] 图11示出根据本公开调度分发器组件里的重定向处理流程图。
[0077] 图12示出根据本公开一实施例提供的一种网页内容爬取的装置的示意图。
[0078] 图13示出根据本公开一实施例中代理IP模块的组成示意图。
[0079] 图14示出根据本公开一实施例中资源管理模块的组成示意图。
[0080] 图15示出根据本公开一实施例中数据抓取模块的组成示意图。

具体实施方式

[0081] 现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
[0082] 此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现、材料或者操作以避免喧宾夺主而使得本公开的各方面变得模糊。
[0083] 附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
[0084] 图1示出本公开一实施例中提供的一种网页内容爬取的方法的步骤流程图,该方法主要针对基于网站内容爬取领域,尤其是需要登录的网站(图形验证码识别和密码加解密)的爬取。
[0085] 如图1所示,在步骤S10中,调度爬取任务,在调度爬取任务的同时根据预设的时间周期定时地进行调度。
[0086] 如图1所示,在步骤S20中,当查询到爬取任务有代理设置时,获取代理IP队列。
[0087] 图2示出获取代理IP队列的步骤流程图,如图2所示,在步骤S21中,判断爬取任务是否需要设置代理IP。
[0088] 如图2所示,在步骤S22中,如果需要设置代理IP,则从配置表中查询针对当前系统已配置的代理IP地址队列,如果不需要设置代理IP,则结束。
[0089] 如图2所示,在步骤S23中,从已配置的代理IP地址队列中取出一个IP地址。
[0090] 如图2所示,在步骤S24中,检测取出的IP地址是否能够爬取通过,如果能够通过则即为找到有效IP,如果不通过则说明当前IP是无效IP,还要判断是否已经到达已配置的代理IP地理队列的最后一个,如果是最后一个则结束,不是最后一个就取下一条IP地址继续配置到config配置文件中并进行检测,即继续步骤S25。
[0091] 如图2所示,在步骤S25中,按照队列顺序采用轮循方式取出下一个IP地址进行检测,循环操作直至找到有效IP,如果循环到最后一条IP地址都未找到有效的IP地址,则直接结束任务所有爬取通过的有效IP构成代理IP队列,以便对网页内容进行爬取。
[0092] 上述进行动态代理IP设置以及轮循的步骤由反监控组件完成,原理示意如图3所示,当创建httpclient(客户端编程工具包)时,查询配置表针对当前爬取任务是否需要设置代理IP,如果需要的话,查询针对当前系统配置的代理IP地址队列,一般都配置5-10条,按照队列顺序首先取出一条去设置到config配置文件中,然后检测该IP是否能爬取通过,如果能通过就进行后续的爬取任务,如果当前IP是无效IP,则按照队列索引指针(index++)的方式轮循队列,取下一条继续配置到config配置文件中并进行检测,循环操作直至找到有效IP,如果循环到最后一条都未找到有效IP,则直接结束任务。
[0093] 如图1所示,在步骤S30中,进行资源管理处理,主要是登录账号、密码、会话保持和一些必要参数的设置以及控制。
[0094] 其中图4示出模拟用户登录的步骤流程图,如图4所示,初始化cookie信息,即在步骤S31中,判断是否存在已有的cookie,如果存在已有的cookie则进一步判断已有的cookie是否有效。
[0095] 如图4所示,在步骤S32中,如果没有已有的cookie或者已有的cookie已失效,则重新生成cookie。
[0096] 如图4所示,在步骤S33中,如果已有的cookie仍有效,则使用已有的cookie或重新生成的cookie来获取图片验证码,当图片验证获取成功后组织登录参数。
[0097] 如图4所示,在步骤S34中,动态拼装登录参数后请求登录接口,如果通过登录接口能够成功登录则更新已有的cookie,如果未能成功登录则判断是否继续登录,如果继续登录则重新初始化cookie信息。
[0098] 上述模拟用户登录流程的原理示意如图5所示,首先初始化cookie信息,判断是否有之前的cookie信息,如果有的话,需要进一步判断cookie是否失效,失效时间根据不同网站失效时间来配置,如果没有cookie或者cookie已失效,则重新产生一个cookie并保存入库,如果未失效的话,则使用当前cookie获取图片验证码,图片验证获取成功后,组织登录参数,有的网站需要对登录名和密码进行加密,具体加密逻辑跟网站保持一致,动态拼装登录参数后请求登录接口,登录成功后更新最新的cookie,后续爬取操作基于登录成功后的cookie进行,如果登录失败,则判断是否要继续登录,如果尝试继续登录重复整个流程,如果不尝试则结束。
[0099] 如图1所示,在步骤S40中,由数据抓取引擎采用多线程并行处理的方式进行数据抓取。由上一步骤S30进行资源管理处理的数据交给数据抓取引擎来抓取数据,采用多线程并行处理的方式。
[0100] 图6示出本公开一实施例提供的方法中进行数据抓取的步骤流程图。
[0101] 如图6所示,在步骤S41中,模拟浏览器打开目标网站。
[0102] 如图6所示,在步骤S42中,判断是否成功打开目标网站,如果没有打开则结束。
[0103] 如图6所示,在步骤S43中,如果成功打开则获取目标网站上的所有表单控件,并进行逐一赋值后提交表单数据。
[0104] 如图6所示,在步骤S44中,加载JS请求,并根据JS请求返回JSON格式数据。
[0105] 如图1所示,在步骤S50中,各个线程对各自所抓取的数据交由解析引擎进行数据解析,并对解析数据进行持久化操作。其中解析引擎结合解析规则针对不同类型的返回数据进行数据解析,返回数据的类型包括JSON格式数据、HTML格式数据以及通过JS动态加载得到的数据。得到的数据包括文本、图片、文件流等等,保存逻辑会判断是全量更新还是增量更新进行保存操作。
[0106] 另外,图7还示出一种网页内容爬取的方法,除了包括上述步骤S10~S50,还包括:
[0107] 步骤S60,进行数据结构化操作,从数据源中抽取出所需的数据,经过数据清洗,并按照预先定义好的数据模型,将清洗后的数据加载到数据模型中。数据结构化操作即数据的清洗、过滤、汇总等。
[0108] 图7所示的方法整个流程分为六个主要步骤,各个步骤相互衔接又最大化的保持独立,这样保证了整个工作流的顺利流转。
[0109] 本实施例中提供的方法需要基于一个平台来实现,该平台可以用于网站内容爬取、自定义舆情监测和内部用户UI集成化测试的平台,该平台的总体架构图如图8所示,该平台主要包括:数据源、组件服务、源数据、数据仓库、主题数据库以及应用六部分。
[0110] 数据源是爬取数据的来源,目标系统提供业务所需要数据,例如包括目标数据A、目标数据B、目标数据C、目标数据D……。
[0111] 组件服务通过两台或者多台服务器构建爬虫集群针对目标源进行爬取,每台服务器上部署爬虫程序,包括调度管理、配置管理、模板管理、任务管理、反监控管理、检索引擎管理等等。多个节点爬取能提高爬取效率、存储和带宽资源,构建高效、均衡、可靠、大规模拓展的全分布式爬虫集群。
[0112] 源数据库中包括多个子源数据库,如源数据库1、源数据库2、源数据库3以及其他源数据库。数据存储是抓取系统主流程的主要环节之一,它负责对解析结果的字段进行保存,以便后面提供其它处理过程进行处理。
[0113] 数据仓库对从源数据中抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据模型,将数据加载到数据模型中去。在数据仓库主要对来自源数据库的数据进行ETL处理,ETL是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。
[0114] 主题数据库也包括多个子主题数据库,如主题数据库1、主题数据库2、主题数据库3以及其他主题数据库。通过业务规则抽取数据仓库中的数据,形成以主题为模块的数据库,分类存储。
[0115] 最后一部分是应用,主要是基于主题数据库开发的各种应用,比如:;评分、报告、接口、报表、业务分析等等。
[0116] 按照功能划分的话,该平台的功能组件图如图9所示,即分为控制层、组件层和存储层。
[0117] 控制层主要是通用可扩展的爬取集群,主要功能包括爬取线程池的管理、应用连接池的管理和执行队列管理。主要完成底层的控制管理,比如爬取线程池管理,多线程的爬取可以提升爬取效率,连接池管理主要是解决应用与数据源建立连接池管理,节约连接开销资源,执行队列管理,对于资源或大量数据的爬取加载到队列任务中去,排队处理,减少服务器压力。
[0118] 组件层是整个爬取作业的核心,反监控管理主要是解决被访问网站禁止爬虫访问,如:新闻、媒体、未公开(需登录)等;会给爬取数据带来障碍,需要通过反监控策略来避开检测,从而达到反监控效果;抓取任务调度器根据爬取内容制定爬取优先级,因为先后顺序,如:一级域名和二级域名内容;数据源抓取规则根据数据源配置不同的爬取规则,客户化管理配置;检索引擎根据爬取内容做分词检索、索引检索、舆情分析和内容过滤等;解析引擎根据爬取内容调用不同内容解析器:图片、文本或视频等文件处理;如果重复抓取会浪费资源,如果不抓需要一个海量的去重判断缓存。判断抓不抓,抓了后存不存,并且这个缓存需要快速读写。常见的做法有BLOOMFILTER、相似度聚合、分类海明距离判断,对于临时爬取或计算数据可放入缓存中,便于资源回收和浪费,监控管理指不管什么系统都可能出问题,如果对方服务器宕机、网页改版、更换地址等我们需要第一时间知道,这时监控系统就起到出现了问题及时发现并通知联系人,资源管理服务主要是对网站分类体系、网站、网站访问URL、账号等基本资源的管理维护;
[0119] 如图9所示,组件层主要功能包括数据源爬取规则的配置管理、检索引擎管理、解析引擎管理、抓取任务调度分发器管理、反监控管理、数据去重过滤管理、缓存管理、爬取监控管理、资源服务管理,主要包括账号池和代理池管理,以下逐一进行说明。
[0120] 配置管理,分为可视化配置和智能化配置两种。
[0121] 检索引擎管理,其中主要是分词器、所引器、链接关系、信息过滤器、舆情分析器。检索引擎组件里的模拟浏览器动态加载通过JS请求的数据,请求开始通过WebClient对象的getPage方法模拟打开Url网址,判断打开结果是否成功,如果打开失败,则结束任务;打开成功则通过获取的HtmlPage对象获取网站上的所有表单控件,对表单逐一赋值后提交表单数据,提交后加载JS请求,对JS请求返回的JSON数据交给解析引擎处理,模拟浏览器动态加载JS数据就结束,检索引擎上述工作原理如图10所示。
[0122] 解析引擎管理,其中主要是链接解析、图片、文本、文件以及国际化等。
[0123] 抓取任务调度分发器管理,主要包括API的管理、视频管理、音频管理、网页管理等。调度分发器组件里的重定向处理流程图如图11所示,首先发送请求,判断返回状态码是否为302,如果为302则获取response请求中的location地址重新请求,如果还是返回302则循环操作,直到返回200结束,将返回的内容交给解析引擎处理,有的网站需要对返回的location做判断处理,例如有的网站返回的location只有包含main字符时才发请求,所以具体发送条件要根据具体网站来判断。
[0124] 反监控管理,主要包括反监控规则管理、异常规则管理、异常恢复策略管理、抓取频度策略管理、模拟用户访问、虚拟浏览器访问。
[0125] 数据去重过滤管理,针对重复数据的过滤处理。
[0126] 缓存管理,增加爬取效率把需要爬取的临时数据存储在缓存系统中,把需要最终数据存储到数据库中。
[0127] 爬取监控管理,对爬取任务做监控,对失败问题进行恢复重新爬取。
[0128] 资源服务管理,主要包括相关配置数据或资源做抽象管理,提供UI界面操作。
[0129] 最后,存储层的主要功能包括关系型数据存储、非结构化数据存储。根据实际爬取数据源进行存储适配。
[0130] 本实施例提供的爬取网页内容的方法流程分为定时调度、代理IP、资源管理、数据抓取、数据持久化、数据结构化六个部分,其中定时调度、代理IP、资源管理、数据抓取这四部分对应组件层,数据持久化、数据结构化这两部分对应存储层。
[0131] 本实施例提供的方法考虑到如何克服高度并发、以及对网络带宽的占用问题,提出了设计一个DNS解析器,以便于有效的利用网络带宽,减少网络传输延时,可以用于网站内容爬取、自定义舆情监测和内部用户UI集成化测试的平台。通常爬虫系统都是UI界面操作,本实施例解决无UI界面爬取系统。本实施例降低技术人员研发成本;系统可交由运营人员使用;如果系统交易研发人员来维护必然会占用研发资源;解决自定义舆情监测;监测网站出现的关键字;还能够帮助系统解决UI集成测试问题;快速完成功能测试。
[0132] 综上所述,本实施例提供的方法支持URL分层爬取,可自定义爬取网站层次深度;在爬取网站内容时往往会碰到很多超链接;针对连接做集合分层处理;解决网站内容实时抓取,根据自定义关键字爬取网站检索内容,过滤网页数据;针对自定义网站爬取内容做脱敏处理,解决相关数据安全或信息泄露;分词处理:解决网站爬取内容过滤和筛选;通过分词器对爬取内容做分词和个性化标签储存处理;页面信息的提取:实现符合W3C标准的解析页面引擎,使得开发人员更容易理解和快速开发;针对需要登录的网站抓取:实现图形验证码识别和密码的加解密管理;模拟用户登录网站并维持网站的cookie会话保持。
[0133] 图12还示出本实施例另一实施例提供的一种网页内容爬取的装置的示意图,该装置100包括:任务调度模块110、代理IP模块120、资源管理模块130、数据抓取模块140、数据持久化模块150以及数据结构化模块160。
[0134] 任务调度模块110用于调度爬取任务;代理IP模块120用于判断爬取任务是否有代理设置,并当查询到爬取任务有代理设置时,获取代理IP队列;资源管理模块130用于进行资源管理处理;数据抓取模块140用于由数据抓取引擎采用多线程并行处理的方式进行数据抓取;数据持久化模块150用于各个线程对各自所抓取的数据交由解析引擎进行数据解析,并对解析数据进行持久化操作。数据结构化模块160用于进行数据结构化操作,从数据源中抽取出所需的数据,经过数据清洗,并按照预先定义好的数据模型,将清洗后的数据加载到数据模型中。
[0135] 在本实施例中,任务调度模块110根据预设的时间周期定时地调度爬取任务。
[0136] 在本实施例中,代理IP模块120的组成示意图如图13所示,该代理IP模块120包括:判断子模块121、查询子模块122、取出IP地址子模块123、检测子模块124和轮循子模块125。
[0137] 判断子模块121用于判断爬取任务是否需要设置代理IP;查询子模块122用于当判断子模块的判断结构为需要设置代理IP时,从配置表中查询针对当前系统已配置的代理IP地址队列;取出IP地址子模块123用于从已配置的代理IP地址队列中取出一个IP地址;检测子模块124用于检测取出的IP地址是否能够爬取通过,如果能够通过则即为找到有效IP;轮循子模块125用于按照队列顺序采用轮循方式取出下一个IP地址进行检测,所有爬取通过的有效IP构成代理IP队列,以便对网页内容进行爬取。
[0138] 在本实施例中,资源管理模块130的组成示意图如图14所示,该资源管理模块130包括:包括:初始化子模块131和图片验证子模块132。
[0139] 初始化子模块131用于初始化cookie信息,判断是否存在已有的cookie,如果存在已有的cookie则进一步判断已有的cookie是否有效;当没有已有的cookie或者已有的cookie已失效时,重新生成cookie。图片验证子模块132用于当已有的cookie仍有效时,使用已有的cookie或重新生成的cookie来获取图片验证码,当图片验证获取成功后组织登录参数;动态拼装登录参数后请求登录接口,如果通过登录接口能够成功登录则更新已有的cookie,如果未能成功登录则判断是否继续登录,如果继续登录则重复初始化子模块131。
[0140] 本实施例中,数据抓取模块140的组成示意图如图15所示,包括:模拟打开网站子模块141、打开成功判断子模块142、提交表单数据子模块143以及加载JS请求子模块144。
[0141] 模拟打开网站子模块141用于模拟浏览器打开目标网站;打开成功判断子模块142用于判断是否成功打开所述目标网站,如果没有打开则结束;如果成功打开则转至提交表单数据子模块;提交表单数据子模块143用于获取所述目标网站上的所有表单控件,并进行逐一赋值后提交表单数据;加载JS请求子模块144用于加载JS请求,并根据所述JS请求返回JSON格式数据。
[0142] 在本实施例中,数据持久化模块150通过解析引擎结合解析规则针对不同类型的返回数据进行数据解析,返回数据的类型包括JSON格式数据、HTML格式数据以及通过JS动态加载得到的数据。
[0143] 在本实施例中,任务调度模块110即组件层中的抓取任务调度分发器模块,爬虫任务的启动就靠任务调度来管理及分配,此模块为爬虫流程中的核心模块之一。平台调度任务分为定时调度和动态调度两种,针对爬虫采用定时调度。任务调度是整个抓取系统的启动点,所有的抓取任务都是由调度发起、调度结束,是整个抓取流程的控制点,目前按月爬取,后面可根据实际爬取效果调整任务时间。
[0144] 代理IP模块120归属于组件层中的反监控模块,反监控方式有多种,本公开采用代理IP来规避对方系统监控,通过设置代理来请求目标系统,能有效的防止直接访问目标系统造成的封IP情况,任务启动后循环调用代理服务,当能获取到有效代理后返回并且进行下一步,当请求不通或者返回时间超过指定时间,则换下一个代理服务。
[0145] 资源管理模块130即组件层中的资源管理服务,资源管理模块负责整个抓取系统的公共资源及参数配置,整个功能以WEB方式提供,包括几大部分,即:首页、参数设定、站点基本参数、站点扩展参数、统计与查询、其它工具等几大项。
[0146] 数据抓取模块140抓取数据后进行数据解析,其中数据解析是由组件层中的解析引擎来实现,数据解析配合解析规则来具体实现不同类型的返回数据,例如有的返回是JSON格式数据,有的返回HTML格式数据,有的返回结果数据是通过JS动态加载数据,这就分别采用JSON解析引擎、HTML解析引擎、HTTPUNIT解析引擎来处理。根据模板解析页面内容,调用插件进行处理,而后调用保存服务保存结果,调用任务返回处理服务。
[0147] 数据持久化模块150即存储层中的数据存储,是将解析的静态或动态页面数据保存起来,也就是将内存数据模型转换为存储模型,数据模型是针对具体接口设计的,包括解析返回的XML、文件流、JSON等等数据。
[0148] 数据结构化模块160对应总体架构中的数据仓库和主题数据库,从数据源中抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据模型,将数据加载到数据模型中去,转换过程中需要注意:
[0149] 空值处理:可捕获字段空值,进行加载或替换为其他含义数据,并可根据字段空值实现分流加载到不同目标库。
[0150] 规范化数据格式:可实现字段格式约束定义,对于数据源中时间、数值、字符等数据,可自定义加载格式。
[0151] 拆分数据:依据业务需求对字段可进行分解。
[0152] 验证数据正确性:根据业务规则配置数据校验规则,对数据进行校验。
[0153] 数据替换:对于因业务因素,可实现无效数据、缺失数据的替换。
[0154] 建立ETL过程的主外键约束:对无依赖性的非法数据,可替换或导出到错误数据文件中,保证主键唯一记录的加载。
[0155] 总之,通过本公开所述解决了一般网页和需要登录的网站的各个功能的爬取工作,爬取的任务由爬取组件完成,且实现了快速准确,同时还能够分析出目标网站的层级关系,形成清晰的爬取目标结构图,为爬取的数据建立起清晰的关系,通过反监控管理实现了反爬技术,为最终得到目标数据扫清了障碍。
[0156] 应清楚地理解,本公开描述了如何形成和使用特定示例,但本公开的原理不限于这些示例的任何细节。相反,基于本公开公开的内容的教导,这些原理能够应用于许多其它实施方式。
[0157] 以上具体地示出和描述了本公开的示例性实施方式。应可理解的是,本公开不限于这里描述的详细结构、设置方式或实现方法;相反,本公开意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。