发明内容
本发明为了克服上述技术问题的缺点,提供了一种基于VPN的分布式网络爬虫***及调度方法。
本发明的基于VPN的分布式网络爬虫***,其特征在于:包括部署于同一组织局域网内的爬取设置客户端、爬取主控节点、多个爬取节点、URL索引服务器、数据中心和用户,以及多个远程VPN代理服务器;组织局域网通过路由器接入运营商的方式访问Internet,以便爬取节点使用VPN代理服务器访问Internet中的目标数据源服务器;
爬取设置客户端用于配置数据源、关键词、爬取策略,爬取主控节点根据爬取设置客户端的配置为爬取节点分配任务,实现爬取节点的调度以及均衡各爬取节点的负载;爬取节点中部署着网络爬虫***,爬取节点根据爬取主控节点分配的任务选择一个VPN连接连入远程VPN代理服务器,使用VPN代理服务器访问Internet中的目标数据源服务器;URL索引服务器记录已爬取过的URL及爬取时间,数据中心用于存储抓取的网页数据;用户是网络数据的使用者,通过与数据中心的交互获取相关数据。
本发明的基于VPN的分布式网络爬虫***,所述爬取主控节点、爬取节点、URL索引服务器和数据中心可采用逻辑划分,并非每个设备均需一个物理设备与其对应;URL索引服务器可合并到数据中心,由数据中心承担已爬取URL的记录;所述爬取设置客户端可以是任意具有爬取设置权限的用户。
本发明的基于VPN的分布式网络爬虫***的调度方法,通过以下步骤来实现:
a).确定新闻类网站和社交媒体类网站的数据采集方法,对于信息更新频率和数量较低的新闻类网站,采用爬虫直接抓取目标源数据,再使用关键词进行数据过滤;对于信息更新频率和数量极高的社交媒体类网站,利用目标数据源的站内检索结合关键词获取有效信息,再使用爬虫抓取检索结果;
b).爬取主控节点为各爬取节点分配任务,对于新闻类网站,将同一域名的新闻类网站分配给一个爬取节点采集目标源数据;对于社交媒体类网站,将同一域名的社交媒体类网站分配到全部爬取节点,并为每个爬取节点分配互不相同的关键词;
c).各爬取节点生成初始采集目标数据源URL列表,爬取主控节点为每个爬取节点分配VPN连接列表、新闻类网站采集入口URL地址、社交媒体类采集入口URL地址以及关键词后,爬取节点从VPN连接列表中选择最久未使用的VPN连接连入远程VPN代理服务器,使用VPN代理服务器访问新闻类网站和社交媒体类网站;设爬取节点获取的新闻类网站的网页URL地址列表为URL_Init_Listweb,获取的社交媒体类网站的检索入口URL地址列表为URL_Init_Listsoc,爬取节点的初始采集目标数据源列表URL_Init_List为URL_Init_Listweb与URL_Init_Listsoc的并集;
d).各爬取节点确定最终采集目标数据源URL列表,爬取节点通过将URL_Init_List与URL索引服务器所维护的URL_List进行比较、判断采集过URL地址与初次访问时间差是否小于相应网页类型的重访问时间,形成中间采集目标数据源列表URL_Intermed_List;然后通过对URL_Intermed_List进行混排生成最终采集目标数据源列表URL_Final_List;
e).各爬取节点采集目标数据源列表的网页数据,爬取节点采集URL_Final_List列表中各URL地址所指向的网页数据,对于新闻类网页按照网站分组,将网页数据存放到新闻类网站结果列表Data_Final_Listweb中;对于社交媒体类网页,将网页数据存放到社交媒体结果列表Data_Final_Listsoc中;并将Data_Final_Listweb和Data_Final_Listsoc打包发送给数据中心;
f).URL索引服务器维护更新URL列表,URL索引服务器接收到爬取节点发送的URL_List更新请求后,将所要更新的URL地址添加到URL_List列表中,并将访问时间设置为当前时间,实现URL_List列表的更新;
g).各爬取节点将爬取结果存储到数据中心,各爬取节点逐一采集各自最终采集目标数据源列表URL_Final_List中每条URL数据源,将采集结果缓存至本地,在完成列表URL_Final_List中所有数据源的采集后,将采集到的数据一次性发送至数据中心;
h).各爬取节点向爬取主控节点汇报状态,各爬取节点按照约定时间,定时向爬取主控节点发送心跳信号和各自的采集时间表;
i).爬取主控节点根据所汇报的状态调节负载,爬取主控节点根据计算的新闻类网站的权重和社交媒体类网站的各关键词权重,对各爬取节点的负载做出均衡调整。
本发明的基于VPN的分布式网络爬虫***的调度方法,设爬取节点数为Ncl,不同域名的新闻类网站数为Nweb,不同域名的社交媒体类网站数为Nsoc,社交媒体类网站的关键词数为Nkw;则步骤b)中,为每个爬取节点平均分配个不同域名的新闻类网站,将域名不同的社交媒体类网站分配到所有爬取节点,并为每个爬取节点平均分配个不同的关键词;
爬取主控节点维护着爬取节点任务分配表、爬取节点心跳表和VPN连接账户表,新闻类网站的任务分配表中记录各个爬取节点所分配到的网站及各个网站的权重,新闻类网站webi的权重的计算公式为:
其中,为抓取新闻类网站webj所花费的时间,i∈[1,Nweb],j∈[1,Nweb];初始采集各新闻类网站花费时间未知时,认为所有新闻类网站采集时间相同,则各新闻类网站的初始权重为
社交媒体类网站的任务分配表中记录各个爬取节点在每个社交媒体类网站中所分配到的关键词以及不同社交媒体类网站不同关键词的权重,社交媒体类网站soci中关键词kwj的权重的计算公式为:
其中,为在社交媒体类网站soci中采集关键词kwk相关的信息所所花费的时间,i∈[1,Nsoc],j、k∈[1,Nkw];初始在各社交媒体类网站中采集不同关键词相关信息花费时间未知时,认为各关键词相关信息的采集时间相同,则各关键词的初始权重为
本发明的基于VPN的分布式网络爬虫***的调度方法,步骤c)中所述的各爬取节点生成初始采集目标数据源URL列表具体通过以下步骤来实现:
c-1).爬取节点从VPN连接列表中选择最久未使用的VPN连接连入远程VPN代理服务器,使用VPN代理服务器访问新闻类网站和社交媒体类网站,获取初始采集目标数据源列表,同时记录使用该VPN连接的开始使用时间;并通过Y/N记录VPN连接最近是否使用过,若最近使用过该VPN连接标识为Y,反之标识为N;
c-2).爬取节点首先解析采集任务的新闻类网站和社交媒体类网站的主机地址,然后将自身的任务主机地址与暂时停用目标主机列表Host_Disable_List进行比对,去除出现在Host_Disable_List中且停用时间小于2小时的任务主机,并删除Host_Disable_List中停用时间大于2小时的主机地址;
c-3).假设比对Host_Disable_List之后保留的新闻类网站为webj,webj+1,…,webk,其对应的采集入口URL地址分别是 爬取节点spideri分别以为接入口获取相应网站中网页URL地址列表
比对Host_Disable_List之后保留的社交媒体类网站 对应的检索入口URL地址分别是各社交媒体分配到spideri的关键词为 则爬取节点spideri分别以各社交媒体的检索地址为接入口结合社交媒体所对应的关键词获取各社交媒体网页URL地址列表
初始采集目标数据源列表URL_Init_List由URL_Init_Listweb和URL_Init_Listsoc组成,即URL_Init_List=URL_Init_Listweb∪URL_Init_Listsoc。
本发明的基于VPN的分布式网络爬虫***的调度方法,步骤d)中各爬取节点确定最终采集目标数据源URL列表具体通过以下步骤来实现:
d-1).爬取节点首先将URL_Init_List与URL索引服务器所维护的URL_List列表进行比对,查看URL_Init_List中的每条URL地址是否采集过,若未采集则将此条URL放入中间采集目标数据源列表URL_Intermed_List,并在URL_Intermed_List中记录此URL为新增地址,否则执行步骤d-2);
d-2).若URL_Init_List中某条URL地址已存在于URL列表,说明已经采集过此URL地址中的数据,然而新闻类网站和社交媒体类网站的数据不断更新,在网页活跃期内仍需持续采集更新数据;因此,当URL_Init_List中某条URL地址已存在于URL_List中,则首先判断该URL地址的网页类型,将当前时间与该URL地址的初次访问时间对比,若两者的时间差小于相应网页的重访时间标准,则将此URL地址放入URL_Intermed_List,否则不再采集该URL地址数据。
d-3).首先将URL_Intermed_List中的URL地址按照主机分组划分成若干子列表,然后采用随机方法随机挑选一个子列表,并在该子列表中随机选择一个未被选中过的URL地址放入URL_Final_List,迭代子列表和URL地址的选择过程直至选完所有子列表的所有URL地址。
本发明的基于VPN的分布式网络爬虫***的调度方法,步骤e)中所述的各爬取节点采集目标数据源列表的网页数据通过以下步骤来实现:
e-1).爬取节点从自身的URL_Final_List中取出一条URL地址,通过当前VPN连路采集URL地址所指向的网页数据,若返回结果为网页数据,则执行步骤e-2);若返回结果为服务器拒绝访问或其他VPN相关错误,则执行步骤e-3);
e-2).缓存采集结果,存放到混排的结果列表Data_Init_List中,并记录网页的类型、网页的来源、社交媒体类网页所对应的检索关键词、网页采集花费的时间;所采集的URL地址被标识为新增地址时,则向URL索引服务器发送URL_List更新请求;
e-3).若爬取节点中有标识为最近未使用过的VPN连接,则在标识为最近未使用过的VPN连接中,通过当前时间与最近未使用过的VPN连接的开始使用时间对比,选择一个最久未使用VPN连接,在连接成功后,执行步骤e-4);若爬取节点的VPN连接全部标识为最近使用过,执行步骤e-5);
e-4).使用新的VPN连接采集网页数据,若返回结果为网页数据,则执行步骤e-2);若仍出现服务器拒绝访问或其他VPN相关错误,则执行步骤e-3);
e-5).爬取节点向爬取主控节点申请新的VPN连接,若成功申请到新的VPN连接则将此VPN加入VPN连接列表,并将申请到的VPN连接标识为最近未使用,执行步骤e-3);若未申请到VPN连接执行步骤e-6);
e-6).删除URL_Final_List中与此URL主机地址相同的未采集URL,执行步骤e-1)。
本发明的基于VPN的分布式网络爬虫***的调度方法,对社交媒体类网站的大规模采集对外网IP地址的要求远高于新闻类网站的采集,因此本发明所需的VPN个数主要受限于社交媒体类网站的关键词,通过如下公式估算:
其中VPNs表示所需VPN连接数,Nsearchpage表示检索结果页链接个数,Nvpn_ip表示社交媒体类网站允许一个IP地址采集的页数;
所需爬取节点的个数通过如下公式估算:
其中Clients表示需要爬取节点的个数,ExpectTime表示完成一轮采集所花费的期望时间,AccessTime表示连接远程服务器及采集数据时间,VPNLinkTime表示VPN单次连接时间。
本发明的有益效果是:首先,单一域网络爬虫共享同一IP出口地址,访问的频率和总量将受到限制,本发明中的爬取节点通过VPN拨号的方式连入远程VPN代理服务器,进而使用代理服务器的公网IP地址访问数据源,通过切换VPN连接获取不同公网IP,解决局域网爬虫IP地址单一问题;其次,虽然通过连入远程VPN代理服务器的方式可获得多个公网IP地址,但就社交新闻类网站的更新频率而言,IP地址仍是珍贵的稀缺资源,为使用一个IP地址尽可能多的获取数据,本发明采用多目标数据源URL穿插采集的方式,避免同一时间过于密集地采集单一目标服务器中的数据,从而造成服务器拒绝访问问题,解决社交媒体类网站平台数据采集覆盖性和完整性;最后,与当前负载均衡通过分配网络连接方式不同,本发明采用调整关键词的方式均衡各爬取节点的负载。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
为解决大多数组织在访问Internet时IP地址单一,从而导致社交网站数据爬取不完整和覆盖差问题,本发明提出了一种基于VPN的分布式网络爬虫***。
如图1所示,给出了为本发明基于VPN的分布式网络爬虫***的部署结构,本发明基于VPN的分布式网络爬虫***部署于组织局域网内,通过路由器接入运营商的方式访问Internet。基于VPN的分布式网络爬虫***由爬取设置客户端、爬取主控节点、爬取节点、URL索引服务器、数据中心以及最终用户组成。
爬取设置客户端用于配置数据源、关键词、爬取策略等;爬取主控节点根据爬取设置客户端的配置为多个爬取节点分配任务,负责爬取节点的调度并均衡各爬取节点的负载;爬取节点中部署着网络爬虫***,在接到爬取主控节点分配的采集任务后选择一个VPN连接连入远程VPN代理服务器,使用代理服务器访问Internet中的目标数据源服务器;URL索引服务器记录已爬取过的URL及爬取时间;数据中心用于存储抓取的网页数据;用户是网络数据的使用者,可通过多种方式与数据中心交互。
基于VPN的分布式网络爬虫***中的各设备均为逻辑划分,并非每个设备均需一个物理设备与其对应。其中爬取设置客户端可以是任意具有爬取设置权限的用户;在设备性能富有余地的情况下,URL索引服务器也可合并到数据中心,由数据中心承担已爬取URL的记录功能。
如图2所示给出了本发明基于VPN的分布式网络爬虫***的数据抓取步骤,将基于VPN的分布式网络爬虫***部署到组织内往后,所采用的数据抓取方法步骤如图2所示。
步骤一:确定新闻类网站和社交媒体类网站平台的数据采集方法;
步骤二:爬取主控节点为各爬取节点分配任务;
步骤三:各爬取节点生成初始采集目标数据源URL列表;
步骤四:各爬取节点确定采集目标数据源URL列表;
步骤五:各爬取节点采集目标数据源列表的网页数据
步骤六:URL索引服务器维护更新URL列表;
步骤七:各爬取节点将爬取结果存储到数据中心;
步骤八:各爬取节点向爬取主控节点汇报状态;
步骤九:爬取主控状态根据所汇报的状态调节负载。
步骤一,新闻类网站和社交媒体类网站平台的数据采集方法确定如下:
组织关注的数据源既有指导行业发展走向的政策类网站,也有介绍相关领域最新科技动态及竞争对手产品信息的新闻类网站,以及反应用户对产品评价的博客、论坛、微博等社交网站。其中政策类网站和新闻类网站的信息一般是由网站编辑工作人员撰写录入,单个网站信息更新频率和数量较低,其日更新量一般不超过千条。而论坛、微博等社交媒体平台的信息由活跃于互联网和移动网的网民自由撰写发表,单个媒体平台信息更新频率和数量极高,日更新量超过亿条,任何第三方爬虫***都难以应对如此量级的数据采集。所幸组织所关注的重点是业务领域相关信息,这些信息只是各类数据源提供数据的子集。组织通常可采用构建本体知识库的方式,描述业务领域过滤无效信息。为保证业务领域描述的完整性,构建的本体知识库一般包含几百个概念和实例(关键词)。在明确目标数据源和关键词的基础上,组织获取有效信息的方法有两种。其一,使用爬虫直接抓取目标源数据,再使用关键词进行数据过滤;其二,利用目标数据源的站内检索结合关键词获取有效信息,再使用爬虫抓取检索结果。
假设本体知识库中的关键词数为Nkw,目标数据源中单位时间内信息的更新量为Nd,受限于新闻类网站页面承载的信息量,Nd将分布于新闻类网站的多个页面,一个页面承载的信息数为C。在新闻类网站信息总更新量Nd中,与组织业务领域相关的有效信息量为Ni。两种采集方法与服务器的交互次数可分成两部分,分别是为得到有效信息所在的位置访问页面的次数(访问目录页次数)和抓取信息的次数(访问内容页次数)。
若Ni均匀的分布于Nd中,则采用第一种方法获取全部Ni条有效信息需访问目标数据源次,采用第二种方法获取全部Ni条有效信息需访问目标数据源次。面对日信息更新量过亿的社交媒体类网站平台,则Nd>>C,Nd>>Ni且Nd>>Nkw,采用第一种方法访问目标数据源的次数远大于第二种方法,显然对于信息更新频率极高的社交媒体类网站平台更适合于采用第二种方法而非第一种方法。而面对日信息更新量少于千条的新闻类网站数据Nd并不会比Ni大一个数量级,且若新闻类网站是组织挑选的行业内新闻类网站则Nd≈Ni,此时影响两种方法访问服务器次数的关键在于Nkw。显然对于信息更新频率较低的新闻类网站,采用第一种方法采集数据,而后在本地使用关键词过滤信息的方式,可有效减少与服务器的交互次数,增强IP地址利用率。因此本发明采用第一种方法采集新闻类网站数据,而采用第二种方法采集社交媒体类网站数据。
步骤二,在明确新闻类网站和社交媒体类网站平台的采集方法后,爬取主控节点为各爬取节点分配任务的方案如下:
当前种子连接分配策略一般是以域名(主机)为单位,将同一域名的数据交由一个爬取节点采集。本发明也采用此种策略采集新闻类网站数据,将同一域名的新闻类网站分配给一个爬取节点采集。如前所述采集社交媒体类网站平台,访问目标服务器的次中,Nkw次访问并未采集信息,而是关键词检索引起的开销。受同一IP地址访问总量限制以及关键词的演进和变化,若仍将同一域名的社交媒体类网站也交由一个爬取节点采集,关键词的检索会造成极大的浪费有限的访问总量。针对社交媒体类网站数据采集,本发明将同一域名的社交媒体类网站分配到全部爬取节点,并为每个爬取节点分配互不相同的关键词。
假设爬取节点数为Ncl,不同域名新闻类网站数为Nweb,不同域名社交媒体类网站数为Nsoc,社交媒体类网站的关键词为Nkw。在初始各爬取节点状态未知时,爬取主控节点的种子连接分配策略为:将域名不同的新闻类网站平均分配到各爬取节点,也即随机为每个爬取节点分配个不同域名新闻类网站;而将域名不同的社交媒体类网站分配到所有爬取节点,将不同关键词平均分配到各爬取节点,也即为每个爬取节点分配Nsoc个不同域名社交媒体类网站,并随机分配个不同的关键词。
爬取主控节点维护着爬取节点任务分配表、爬取节点心跳表和VPN连接账户表。如表1所示,给出了新闻类网站爬取任务分配表:
表1
表1记录各个爬取节点所分配到的新闻类网站以及各个新闻类网站的权重,新闻类网站webi的权重计算公式为:其中为抓取新闻类网站webj所花费的时间j∈[1,Nweb],初始采集各新闻类网站花费时间未知时,认为所有新闻类网站采集时间相同,则各新闻类网站的初始权重为
表2给出了社交媒体类网站爬取任务分配表:
表2
表2的右续表:
表2记录各个爬取节点在每个社交媒体类网站中所分配到的关键词,以及不同社交媒体类网站不同关键词的权重,社交媒体类网站soci中关键词kwj的权重计算公式为:其中为在社交媒体类网站soci中采集关键词kwk相关的信息所花费的时间k∈[1,Nsoc],初始在各社交媒体类网站中采集不同关键词相关信息花费时间未知时,认为各关键词相关信息的采集时间相同,则各关键词的初始权重为
表3
crawler |
state |
Spider1 |
*** |
Spider2 |
*** |
Spider3 |
*** |
…… |
…… |
SpiderNcl |
*** |
如表3所示,给出了爬取节点心跳表,爬取主控节点定时接收各个爬取节点的心跳状态,并记录在爬取节点心跳表中,从而了解爬取节点是否宕机以及是否有新的爬取节点加入,心跳表中的state记录着各个爬取节点向爬取主控节点最后返回心跳时间。当有节点宕机或新节点加入时,根据各个新闻类网站爬取时间、各个社交媒体类网站不同关键词相关信息爬取所花费的时间,以及所拥有的爬取节点数依据负载均衡原则重新分配任务。
爬取主控节点在给爬取节点分配任务的同时为其分配一个VPN连接列表,初始时爬取主控节点所分配的VPN连接列表包含两个IP地址不同VPN连接。在信息采集过程中,当所分配的IP地址达到采集上限时,爬取节点将向主控节点申请新的VPN连接,若存在未分配VPN连接则主控节点将为爬取节点再分配一个连接。如表4所示,给出了爬取中控节点的VPN连接账户表:
表4
VPN connection |
IP address |
user |
Password |
assignment |
vpn1 |
*** |
*** |
*** |
spider3 |
vpn2 |
*** |
*** |
*** |
none |
vpn3 |
*** |
*** |
*** |
spider1 |
vpn4 |
*** |
*** |
*** |
spiderNcl |
…… |
…… |
…… |
…… |
…… |
vpnW |
*** |
*** |
*** |
spider2 |
爬取主控节点在VPN连接账户表中记录着***所拥有的VPN账号及各账号的分配情况,如表4所示,其中assignment记录着VPN连接账户的分配情况。
步骤三,各爬取节点在分配到VPN连接列表、新闻类网站采集入口URL地址、社交媒体类网站搜索入口URL地址以及关键词后,生成初始采集目标数据源列表方案如下:
爬取节点中部署着网络爬虫***,在接到爬取主控节点分配的采集任务以及VPN连接列表后,从VPN连接列表中选择一个最近未使用且最久未使用的VPN连接连入远程VPN代理服务器,使用代理服务器访问Internet中新闻类网站和社交媒体类网站,获取初始采集目标数据源列表,同时记录使用该VPN连接的起始时间。如表5所示,给出了爬取节点的VPN列表:
表5
爬取节点所维护的VPN列表如表5所示,start time记录VPN连接的开始使用时间,recently used通过Y/N记录VPN连接最近是否使用过,若最近使用过该VPN连接则标识为Y,反之标识为N。
暂时停用目标主机列表Host_Disable_List记录着暂时不采集的主机地址及起始停用时间。在采集任务开始之前,爬取节点spideri将首先解析采集任务的新闻类网站及社交媒体类网站的主机地址。然后将任务主机地址与Host_Disable_List进行对比,去除出现在Host_Disable_List中且停用时间小于2小时的任务主机,并删除Host_Disable_List中停用时间大于2小时的主机地址。
假设比对Host_Disable_List之后保留的新闻类网站为webj,webj+1,…,webk,其对应的采集入口URL地址分别是爬取节点spideri分别以为接入口获取相应新闻类网站中网页URL地址列表
比对Host_Disable_List之后保留的社交媒体类网站 对应的检索入口URL地址分别是各社交媒体类网站分配到spideri的关键词为 则爬取节点spideri分别以各社交媒体类网站的检索地址为接入口结合社交媒体类网站所对应的关键词获取各社交媒体类网站网页URL地址列表
初始采集目标数据源列表URL_Init_List由URL_Init_Listweb和URL_Init_Listsoc组成,也即URL_Init_List=URL_Init_Listweb∪URL_Init_Listsoc。
步骤四,各爬取节点在得到初始采集目标数据源列表后,确定采集目标数据源列表包含如下三个阶段:
阶段一:比对URL采集列表
URL索引服务器所维护的URL列表(URL_List)记录着所有已爬取过的网页URL及爬取时间,如表6所示,给出了爬取中控节点的URL列表:
表6
URL |
Access time |
web or soc |
http://… |
*** |
web_com |
http://… |
*** |
soc |
https://… |
*** |
web_edu |
…… |
…… |
…… |
https://… |
*** |
soc |
其中,Access time记录网页的初次访问时间,web or soc用于区分网页是来自于社交媒体类网站还是新闻类网站,同时根据新闻类网站后缀不同又将新闻类网站网页分为com、net、edu、gov四种类型。
爬取节点首先将URL_Init_List与URL_List进行比对,查看URL_Init_List中的每条URL地址是否采集过,若未采集则将此条URL放入中间采集目标数据源列表URL_Intermed_List,并在URL_Intermed_List中记录此URL为新增地址,否则转入阶段二;
阶段二:比对URL采集时间
若URL_Init_List中某条URL地址已存在于URL列表,说明已经采集过此URL地址中的数据,然而新闻类网站和社交媒体类网站的数据不断更新,在网页活跃期内仍需持续采集更新数据。斯坦福大学的Cho和Garcia-Monlina指出网页更新时间间隔符合指数分布,不同类型网页更新频率不同。本发明分别统计社交媒体类网站网页、com网站网页、net网站网页、edu网站网页和gov网站网页的平均更新时间作为重访时间标准。因此,当URL_Init_List中某条URL地址已存在于URL_List中,则首先判断该URL地址的网页类型,将当前时间与该URL地址的初次访问时间对比,若两者的时间差小于相应网页的重访时间标准,则将此URL地址放入URL_Intermed_List,否则不再采集该URL地址数据。
阶段三:混排中间采集目标数据源列表
有限的外网IP地址在大规模信息采集中是极其珍贵的资源,在一定时间内无节制频繁地访问同一新闻类网站或社交媒体类网站,会受到目标数据服务器的拒绝,这将成为影响信息采集的制约因素。为充分使用有限的外网IP地址,与其他爬虫***不同,本发明避免集中采集同一新闻类网站或社交媒体类网站URL地址,将URL_Intermed_List中的URL地址进行混排生成最终采集目标数据源列表URL_Final_List。如图3所示,给出了中控节点生成的采集目标数据源列表,图4给出了本发明中爬取中控节点生成URL_Final_List的流程图,首先将URL_Intermed_List中的URL地址按照主机分组划分成若干子列表,然后采用随机方法随机挑选一个子列表,并在该子列表中随机选择一个未被选中过的URL地址放入URL_Final_List,迭代子列表和URL地址的选择过程直至选完所有子列表的所有URL地址。此外,为避免同一新闻类网站或社交媒体类网站的多次域名寻址节省带宽,爬取节点可在一次访问后记录新闻类网站和社交媒体类网站的IP地址。在URL_Intermed_List中被标识为新增地址的URL在混排到URL_Final_List时,同样被标识为新增地址。本发明采用URL+标识在URL_Intermed_List与URL_List对比中未出现在URL_List中的URL地址,也即之前未采集过的网页URL地址。
步骤五,爬取节点在得到采集目标数据源列表后,采集网页数据包含如下两个阶段:
阶段一:采集URL_Final_List中各URL所指向网页数据
1、从URL_Final_List中取出一条URL地址。
2、通过当前VPN链路采集URL地址所指向的网页数据。
3、监测返回结果,
3-1若返回结果为网页数据,
3-1-1统计当前网页采集花费时间,并缓存采集结果,存放到混排的结果列表Data_Init_List中,表7给出了混排的结果列表,其中web or soc记录网页的类型,用于区分该网页是新闻类网站类网页还是社交媒体类网站类网页;host记录网页的来源新闻类网站或来源社交媒体类网站;keyword记录社交媒体类网站类网页所对应的检索关键词,新闻类网站类网页则为空值none;cost记录网页采集花费的时间;page存储网页的具体内容。
表7
URL |
web or soc |
host |
keyword |
cost |
page |
url1 |
web |
*** |
None |
*** |
*** |
url2 |
Soc |
*** |
*** |
*** |
*** |
url3 |
web |
*** |
none |
*** |
*** |
…… |
…… |
…… |
…… |
…… |
…… |
urln |
soc |
*** |
*** |
*** |
*** |
3-1-2若所采集的URL地址被标识为新增地址时,则向URL索引服务器发送URL_List更新请求。
3-2若返回结果为服务器拒绝访问或其他VPN相关错误,
3-2-1若VPN列表的recently used有标识为N的VPN连接,则在标识为N的VPN连接中,通过当前时间与VPN列表中的start time对比,选择一个最久未使用VPN连接,在连接成功后将start time记录为当前时间,标识该VPN连接的recently used为Y,转入3-2-2;若VPN列表的recently used全部标识为Y,则转入3-2-3。
3-2-2使用新的VPN连接采集网页数据,若返回结果为网页数据,则将VPN列表中除此VPN连接的其他recently used标识为N,转入3-1;若仍出现相同错误,转入3-2-1。
3-2-3爬取节点向爬取主控节点申请新的VPN连接,若成功申请到新的VPN连接则将此VPN加入VPN连接列表,并将recently used标识为N,转入3-2-1;若未申请到VPN连接,则转入3-2-4。
3-2-4将该URL主机地址及当前时间记录到Host_Disable_List,删除URL_Final_List中与此URL主机地址相同的未采集URL,并将VPN列表中除此VPN连接的其他recentlyused标识为N,转入1。
4、迭代本阶段中的步骤1至步骤3直至URL_Final_List为空。
阶段二:计算新闻类网站及社交媒体类网站权重,将采集结果发送到数据中心
1、在完成本轮URL_Final_List的采集后,重新分组Data_Init_List,
1-1对于新闻类网页按照网站分组,存放到新闻类网站结果列表Data_Final_Listweb。
1-2对于社交媒体类类网页按照社交媒体类网站分组后,再按照网页所对应关键词进行分组,存放到社交媒体类网站结果列表Data_Final_Listsoc。
2、计算新闻类网站采集时间和社交媒体类网站各关键词相关信息采集时间,记录到爬取节点采集时间表,其逻辑结构如表8和表9所示:
表8
web |
cost |
round |
Webj |
*** |
*** |
Webj+1 |
*** |
*** |
…… |
…… |
…… |
webk |
*** |
*** |
表9
表8给出了爬取节点记录的新闻类网站的采集时间表,表9给出了所记录的社交媒体类网站的采集时间表,其中cost记录各新闻类网站和社交媒体类网站的各关键词采集所花费的时间,round记录本轮URL_Final_List采集完成时间。
2-1汇总Data_Final_Listweb中同一新闻类网站所有网页的采集时间,记录到新闻类网站采集时间表,如表8所示。
2-2汇总中同一社交媒体类网站同一关键词所有网站的采集时间,记录到社交媒体类网站采集时间表,如表9所示。
3、将Data_Final_Listweb和Data_Final_Listsoc打包,发送给数据中心,转入步骤三。
步骤六,URL索引服务器维护更新URL列表
URL索引服务器在接收到爬取节点发送的URL_List更新请求后,将URL地址添加到URL_List中,并将访问时间设置为当前时间。为提高检索速度,URL_List可采用倒排索引机制。
步骤七,各爬取节点向数据中心发送爬取结果
各爬取节点逐一采集各自目标数据源列表中每条URL数据源,将采集结果缓存至本地,在完成任务列表中所有数据源的采集后,按照批处理的方式将采集到的数据一次性发送到数据中心。数据中心将统一负责接收并按照规定的存储格式,对采集结果进行解析存储。
步骤八,各爬取节点向爬取主控节点汇报以下两种状态:
1、心跳状态
各爬取节点按照约定时间,定时向爬取主控节点发送心跳信号,以表明爬取节点仍处于活动状态。爬取主控节点若在约定时间内未收到爬取节点的心跳信号,则认为爬取节点宕机,反之则认为爬取节点工作正常。当爬取主控节点收到新的心跳信号时则认为有新的爬取节点加入。
2、信息采集情况
各爬取节点按照约定时间,定时将各自的采集时间表发送到爬取主控节点,发送成功后清空本地表。
步骤九,爬取主控节点调节各爬取节点负载的方案如下:
该步骤中所述的爬取主控节点根据所汇报的状态调节负载具体通过以下步骤来实现:
i-1).获取采集时间表,各爬取节点定时将所记录的新闻类网站的采集时间表和社交媒体类网站的采集时间表发送至爬取主控节点,爬取主控节点将其存储至本地的信息采集汇总时间表中;新闻类网站的采集时间表由各新闻类网站及采集网站所花费的时间cost、采集网站的完成时间round组成;执行步骤i-2);
i-2).计算平均访问时间和权重,爬取主控节点以天为单位,在一天结束时分析当天的信息采集汇总时间表,按新闻类网站汇总当天多轮采集时间,计算当天每个新闻类网站的一轮抓取所需平均访问时间,按社交媒体类网站关键词汇总当天多轮采集时间,计算当天每个社交媒体类网站的每个关键词抓取所需平均访问时间;按照公式(1)计算各新闻类网站的权重;按照公式(2)计算各社交媒体类网站的各关键词的权重;
各爬取节点的社交媒体类网站的关键词负载均衡调节通过步骤i-3)至步骤i-10)来实现;
i-3).判断耗时时间差,爬取主控节点计算出各爬取节点完成某社交媒体类网站的关键词一轮抓取所需平均访问时间,找出耗时最长和最短的爬取节点,计算两者耗时时间差,若两者时间差不大于用户预设调节时间差阈值,则维持当前社交媒体类网站关键词的分配状态,均衡负载结束;若两者时间差大于用户预设调节时间差阈值,则执行步骤i-4);
i-4).关键词排序,爬取主控节点按照权重降序排列该社交媒体类网站的关键词,执行步骤i-5);
i-5).重新分配关键词,爬取主控节点从排好序的关键词中,依次取出第1至第Ncl个关键词顺序分配给spider1、spider2、…、spiderNcl,然后依次取出第Ncl+1至第2Ncl个关键词逆序分配给spider1、spider2、…、spiderNcl,迭代该过程,直至分完该社交新闻类网站的所有关键词,将此关键词的分配记录为初始状态KW_Init_Assignment,spideri代表第i个爬取节点,i≤Ncl;执行步骤i-6);
i-6).迭代次数清零,抽取KW_Init_Assignment状态中所有爬取节点中所有关键词的权重,并计算爬取节点所分配关键词权重的方差Variance_Init,并将迭代次数Iteration清零,令Iteration=0;
i-7).迭代次数加1,令Iteration=Iteration+1,然后判断迭代次数Iteration是否小于指定迭代次数iteration_threshold,若是,则令本次迭代的方差Variance_MinIteration等于初始状态方差,Variance_MinIteration=Variance_Init,执行步骤i-8);否则,执行步骤i-10);
i-8).交换关键词,随机选择两个爬取节点,并在所选择的爬取节点中随机选择两个关键词进行交换,然后重新抽取所有爬取节点中所有关键词的权重,计算权重方差Variance_Random;执行步骤i-9);
i-9).比较权重方差的大小,比较Variance_Random与Variance_MinIteration的大小;
如果Variance_Random<Variance_MinIteration,则保持两个关键词的交换,将Variance_Random赋值给Variance_MinIteration,令Variance_MinIteration=Variance_Random,并将交换失败计数counter清零,令counter=0;Variance_MinIteration为所记录关键词权重方差的最小值,执行步骤i-8);
如果Variance_Random≥Variance_MinIteration,则撤销两个关键词的交换,并使交换失败计数counter加1,即令counter=counter+1;若交换失败计数counter的值小于累计次数阈值counter_threshold,转入步骤i-8);若counter≥counter_threshold,将此关键词的分配记录为第Iteration次迭代状态KW_IntermedIteration_Assignment,转入步骤i-7);
i-10).选取最优状态进行分配,比较多个KW_IntermedIteration_Assignment中的关键词权重方差Variance_MinIteration的值,将Variance_MinIteration值最小的KW_IntermedIteration_Assignment记录为关键词分配最终状态KW_Final_Assignment,按照此最终状态更新爬取节点任务分配表,并按此表重新为各个爬取节点分配任务;
各爬取节点的新闻类网站的负载均衡调节采用与步骤i-3)至步骤i-10)相同的方法,只需将步骤i-3)至步骤i-10)中社交媒体类网站的关键词替换为新闻类网站即可。
当爬取节点只应用于信息采集时,服务器负载即为两类数据源的采集工作。此时,当采集任务均衡时,可认为各节点的负载也较为均衡。步骤i-2)所计算的新闻类网站和社交媒体类网站关键词权重描述了采集任务的繁重程度,因此通过均匀地分配新闻类网站和社交媒体类网站关键词,从而使得各爬取节点的权重和相似,即可达到均衡爬取节点负载的目的。
此外,为满足用户需求,***所需的VPN个数和爬取节点个数计算方法如下所示:
1、VPN个数
对社交媒体类网站的大规模采集对外网IP地址的要求远高于新闻类网站的采集,因此本发明所需的VPN个数主要受限于社交媒体类网站的关键词,可通过如下公式大致估算:
其中VPNs表示所需VPN连接数,Nsearchpage表示检索结果页链接个数,Nvpn_ip表示社交媒体类网站允许一个IP地址采集的页数。
2、爬取节点个数
本发明所需爬取节点的个数可通过如下公式大致估算:
其中Clients表示需要爬取节点的个数,ExpectTime表示完成一轮采集所花费的期望时间,AccessTime表示连接远程服务器及采集数据时间,VPNLinkTime表示VPN单次连接时间。