一种分布式的数据采集方法和系统与流程

文档序号:17722954发布日期:2019-05-22 02:18阅读:195来源:国知局
一种分布式的数据采集方法和系统与流程

本发明涉及爬虫技术,尤其是一种分布式的数据采集方法和系统。



背景技术:

互联网数据采集,即网络爬虫,是搜索引擎的核心技术,同时数据采集也是很多互联网创新应用的基础。目前针对各种不同的采集场景,已经有非常多的成熟技术和手段。在互联网数据的采集中,网络爬虫往往会遇到反爬虫机制。其中,最常见的反爬虫机制就是ip封锁,而与之对应的解决方案就是需要使用代理ip。

然而,代理ip是一种有限的资源,当需要大规模采集互联网数据时,必定会出现对代理ip资源的竞争。现有的数据采集方案中,均假设ip资源是无限的。然而,在实际的数据采集的场景中,代理ip往往非常有限而且宝贵,系统的每个并发进程均需要占用ip资源。

目前的分布式数据采集方案,并没有针对采集对象来进行ip资源的分配,导致部分ip资源被过于频繁地使用在长期不更新的主页上,从而导致ip资源被浪费,因此,现有技术的采集效率偏低。



技术实现要素:

为解决上述技术问题,本发明的目的在于:提供一种高效的分布式的数据采集方法和系统。

本发明所采取的第一种技术方案是:

一种分布式的数据采集方法,包括初始化步骤和循环执行步骤:

所述初始化步骤包括:

获取n个目标主页的初始分类数据;所述n个目标主页被分为第一集合和第二集合,其中,属于第一集合的目标主页在设定时间内的平均更新总量大于属于第二集合的目标主页在相同时间内的平均更新总量,且属于第一集合的目标主页的数量小于属于第二集合的目标主页的数量;

所述循环执行步骤包括:

分配t1个第一并发进程对属于第一集合的目标主页进行数据采集;

分配t2个第二并发进程对属于第二集合的目标主页进行数据采集;其中,t1>t2;

根据所述t1个第一并发进程和所述t2个第二并发进程所采集的数据,得到每个目标主页在最近x天内的更新总量;

根据每个目标主页在最近x天内的更新总量对所述n个目标主页进行二次分类;其中,x、n、t1和t2均为正整数。

进一步,所述根据每个目标主页在最近x天内的更新总量对所述n个目标主页进行二次分类,其具体包括:

根据每个目标主页在最近x天内的更新总量,对n个目标主页进行排序;

将在最近x天内的更新总量排名前y%的目标主页分入第一集合;

将在最近x天内的更新总量排名后1-y%的目标主页分入第二集合。

进一步,所述循环执行步骤还包括:

分配t3个第三并发进程获取新的目标主页,并对新的目标主页进行分类;其中,t2>t3。

进一步,所述n个目标主页的初始分类数据通过以下步骤得到:

通过t个第四并发进程统计所述n个目标主页在设定时间内的更新总量;

根据n各目标主页在设定时间内的更新总量对所述n个目标主页进行初始分类。

进一步,所述y=20,所述t1:t2=8:2。

本发明所采取的第二种技术方案是:

一种分布式的数据采集系统,包括:

获取模块,用于获取n个目标主页的初始分类数据;所述n个目标主页被分为第一集合和第二集合,其中,属于第一集合的目标主页在设定时间内的平均更新总量大于属于第二集合的目标主页在相同时间内的平均更新总量,且属于第一集合的目标主页的数量小于属于第二集合的目标主页的数量;

第一采集模块,用于分配t1个第一并发进程对属于第一集合的目标主页进行数据采集;

第二采集模块,用于分配t2个第二并发进程对属于第二集合的目标主页进行数据采集;其中,t1>t2;

第一统计模块,用于根据所述t1个第一并发进程和t2个第二并发进程所采集的数据,得到每个目标主页在最近x天内的更新总量;

分类模块,用于根据每个目标主页在最近x天内的更新总量对所述n个目标主页进行二次分类;其中,x、n、t1和t2均为正整数。

进一步,所述分类模块包括:

排序单元,用于根据每个目标主页在最近x天内的更新总量,对n个目标主页进行排序;

分类单元,用于将在最近x天内的更新总量排名前y%的目标主页分入第一集合;将在最近x天内的更新总量排名后1-y%的目标主页分入第二集合。

进一步,还包括目标主页获取模块:

所述目标主页获取模块用于:分配t3个第三并发进程获取新的目标主页,并对新的目标主页进行分类;其中,t2>t3。

进一步,还包括初始化模块,所述n个目标主页的初始分类数据由初始化模块得到;

所述初始化模块包括:

统计单元,用于通过t个第四并发进程,统计所述n个目标主页在x天内的更新总量,得到统计结果;

分类单元,用于根据所述统计结果将n各目标主页进行分类。

进一步,所述y=20,所述t1:t2=8:2。

本发明的有益效果是:本发明根据目标主页的更新总量对目标主页进行分类,并且给予更新总量多的目标主页分配比较多的并发线程,即分配更多的ip资源,使得ip资源能够得到有效的分配,在保持更新实时性的同时,可以提升ip资源的使用效率;此外,还能缩短更新频繁的目标主页的数据延时,本发明在同等的ip资源条件下,提升了数据采集的效率。

附图说明

图1为本发明一种具体实施例的分布式的数据采集方法的流程图。

具体实施方式

下面结合说明书附图和具体的实施例对本发明进行进一步的说明。

参照图1,本实施例公开了一种分布式的数据采集方法,本方法在分布式系统中实现,其包括初始化步骤和循环执行步骤:

所述初始化步骤包括:

s101、获取n个目标主页的初始分类数据;所述n个目标主页被分为第一集合和第二集合,其中,属于第一集合的目标主页在设定时间内的平均更新总量大于属于第二集合的目标主页在相同时间内的平均更新总量,且属于第一集合的目标主页的数量小于属于第二集合的目标主页的数量;其中,所述目标主页可以指微信公众号,也可以指如博客主页等,第一集合代表更新频繁的目标主页的集合,第二集合代表更新不频繁的目标主页的集合。一个目标主页更新是否频繁可以通过多种条件去判定。例如,在一些实施例中,可以将更新频繁的条件设置为平均每天更新一次为频繁。在另一些实施例中,可以先将各个目标主页的更新频率或者一定时间内的更新总数,进行排序,然后将更新频率或者更新总数排名前20%的认为是更新频繁的目标主页。本步骤,可以通过人工将初始分类输入导入,也可以由系统通过若干个线程来进行爬取、统计然后分类。

所述循环执行步骤包括:

s201、分配t1个第一并发进程对属于第一集合的目标主页进行数据采集;

s202、分配t2个第二并发进程对属于第二集合的目标主页进行数据采集;其中,t1>t2;

所述第一并发进程和第二并发进程所代表的是系统资源,所述第一并发进程和第二并发进行仅为描述方便而通过第一、第二区分,其实质运行的程序内容可以是相同的。

步骤s201和步骤s202一共使用了t1+t2个并发进程;每个并发进程在进行数据采集时均需要占用一定的ip资源,因此,对并发资源的分配就是对ip资源的分配。在本实施例中,将较多的并发进程分配给更新频繁的目标主页,而将较少的并发进程分配给更新不频繁的目标主页。因而,可以提升更新频繁的目标主页的采集频率,使得数据更新得更加及时,同时减少不更新频繁的目标主页的采集频率,释放ip资源。

s203、根据所述t1个第一并发进程和所述t2个第二并发进程所采集的数据,得到每个目标主页在最近x天内的更新总量;在一些实施例中,假设x设置为10,那么当系统针对第一集合和第二集合中的目标主页持续采集10天后,会得到每个目标主页的更新总量。当到了第11天,系统可以将第2天到第11天所采集到的数据作为最近10天采集的数据,重新统计更新总量。在另一些实施例中,系统可以采取另外的策略,例如每10天更统计一次。

s204、根据每个目标主页在最近x天内的更新总量对所述n个目标主页进行二次分类;其中,x、n、t1和t2均为正整数。由于目标主页的更新频率是会发生变化的,有些更新频繁的目标主页可能突然不更新了,有些不更新频繁的主页可能突然每天都更新若干次,因此系统不能一成不变地分配资源。设置本步骤的目的在于,动态更新第一集合和第二集合,以适应目标主页更新频率的变化,提升ip资源分配的合理度。

作为优选的实施例,所述步骤s204具体包括:

s2041、根据每个目标主页在最近x天内的更新总量,对n个目标主页进行排序;本实施例采用降序排列。

s2042、将在最近x天内的更新总量排名前y%的目标主页分入第一集合;

s2043、将在最近x天内的更新总量排名后1-y%的目标主页分入第二集合。

在本实施例中,我们根据目标主页的更新总量,对其进行排名,然后将更新量排名靠前的y%标记为更新频繁的目标主页,将其余的1-y%的目标主页标记为更新不频繁的目标主页。由于目标主页的更新总量具有不确定性,如果采用固定的更新总量作为分类的阈值,会导致被分配到第一集合和第二集合的目标主页的数量可能会发生大规模的波动,从而导致并发进程的分配机制失效。本实施例通过排名比例对目标主页进行分类,因此在目标主页数量不变的情况下,第一集合和第二集合内的目标主页的数量几乎不变。因此,本实施例可以使得系统更加稳定。

作为优选的实施例,所述循环执行步骤还包括:

s205、分配t3个第三并发进程获取新的目标主页,并对新的目标主页进行分类;其中,t2>t3。

本实施例中,由于目标主页的数量可能会变多。例如,可能会出现新增的公众号。此时,系统为了应对新增的公众号,需要另外分配线程对新的公众号进行爬取,并将新的公众号分类到第一集合或者第二集合。

作为优选的实施例,所述n个目标主页的初始分类数据通过以下步骤得到:

s001、通过t个第四并发进程统计所述n个目标主页在设定时间内的更新总量;

s002、根据n各目标主页在设定时间内的更新总量对所述n个目标主页进行初始分类。

本实施例可以通过系统自动爬取目标主页的数据进行统计,从而达到初始化的目的。

所述步骤s001和s002可以在步骤s101之前执行。

作为优选的实施例,所述y=20,所述t1:t2=8:2。本实施例采用的参数,符合二八定律,其存在一定的统计学意义,本实施例使得系统可以对并发进程进行有效的分配。

本实施例将本发明与现有技术的方案进行测试对比。

在本实施例中,代理ip池的ip资源为每秒20个,一共可以支撑100个并发进程。本实施例一共监测10万个微信公众号,持续监测30天。

本发明使用80个并发进程采集第一集合中的微信公众号,使用20个并发进程采集第二集合中的微信公众号,其中,第一集合为测试前30天更新总量前20%的微信公众号的集合,第二集合为其余80%的微信公众号的集合。

现有技术方案,采用100个并发进程对所有微信公众号进行无差别的数据采集。

最终,现有技术的数据平均延迟为8小时,本发明的数据平均延迟为2小时。

本实施例公开了一种与图1中方法对应的分布式的数据采集系统,该系统包括:

获取模块,用于获取n个目标主页的初始分类数据;所述n个目标主页被分为第一集合和第二集合,其中,属于第一集合的目标主页在设定时间内的平均更新总量大于属于第二集合的目标主页在相同时间内的平均更新总量,且属于第一集合的目标主页的数量小于属于第二集合的目标主页的数量;

第一采集模块,用于分配t1个第一并发进程对属于第一集合的目标主页进行数据采集;

第二采集模块,用于分配t2个第二并发进程对属于第二集合的目标主页进行数据采集;其中,t1>t2;

第一统计模块,用于根据所述t1个第一并发进程和t2个第二并发进程所采集的数据,得到每个目标主页在最近x天内的更新总量;

分类模块,用于根据每个目标主页在最近x天内的更新总量对所述n个目标主页进行二次分类;其中,x、n、t1和t2均为正整数。

作为优选的实施例,所述分类模块包括:

排序单元,用于根据每个目标主页在最近x天内的更新总量,对n个目标主页进行排序;

分类单元,用于将在最近x天内的更新总量排名前y%的目标主页分入第一集合;将在最近x天内的更新总量排名后1-y%的目标主页分入第二集合。

作为优选的实施例,还包括目标主页获取模块:

所述目标主页获取模块用于:分配t3个第三并发进程获取新的目标主页,并对新的目标主页进行分类;其中,t2>t3。

作为优选的实施例,还包括初始化模块,所述n个目标主页的初始分类数据由初始化模块得到;

所述初始化模块包括:

统计单元,用于通过t个第四并发进程,统计所述n个目标主页在x天内的更新总量,得到统计结果;

分类单元,用于根据所述统计结果将n各目标主页进行分类。

作为优选的实施例,所述y=20,所述t1:t2=8:2。

对于上述方法实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。

以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

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