一种高效IP代理池的实现方法、系统及数据获取方法与流程

文档序号:22436677发布日期:2020-10-02 10:29阅读:127来源:国知局
一种高效IP代理池的实现方法、系统及数据获取方法与流程

本发明涉及ip代理技术领域,具体为一种高效ip代理池的实现方法、系统及数据获取方法。



背景技术:

近年来,随着互联网业务的高速发展,数据采集需求日益增加。传统的固定ip代理的爬虫方式无法满足大数据时代数据的需求。同时,固定ip代理方式在技术上存在诸多不足。固定ip采集频繁访问网站,采集大量数据容易造成ip的封锁。

当前解决这个问题的方式主要有两种,一是限制ip访问网站的频率;二是设置ip代理地址池,动态的调度代理ip。

采用动态代理ip的方式可以改善固定ip采集数据的不足。然而现行的技术,缺乏一种动态ip代理管理机制,存在ip代理池的规模无法达到理想状态,ip代理池内代理ip的有效性差等问题,无法保证代理ip的高效、稳定与可靠。



技术实现要素:

本发明意在提供一种高效ip代理池的实现方法、系统及数据获取方法,能够解决现有技术ip代理池内的代理ip存在的有效性、稳定性差的问题。

本申请提供如下技术方案:

一种高效ip代理池的实现方法,包括以下内容:

任务构建步骤:读取待爬取的url并将待爬取的url编排成任务加入任务队列中;

任务执行步骤:采集爬虫到任务队列中获取任务并执行,将获取到的代理ip存入初始队列中;

初始校验步骤:对初始队列中的代理ip进行校验,过滤不可用代理ip,并将可用代理ip加入到有效队列中;

定时校验步骤:定时从有效队列中获取代理ip并存入一个校验队列中,并从校验队列中获取代理ip进行校验,根据校验结果将代理ip删除或放回有效队列中;

代理分配步骤:根据代理ip的校验结果和客户端请求,为客户端分配代理ip。

本发明技术方案中,通过初始校验步骤,可以对代理ip进行初步的检测,排除不可用代理ip,进而确保剩下的ip的有效性,通过定时校验步骤,对有效队列中的ip也进行随机性的检测,确保有效队列中的代理ip都是有效的,通过将代理ip放入校验队列,避免其被使用而影响测试结果,确保检测公平,保证检测结果的准确。通过两次检测方式,确保代理ip的有效性,解决现有技术ip代理池内的代理ip存在的有效性、稳定性差的问题。

进一步,还包括:

维护判断步骤:定期检测有效队列中的代理ip数量是否小于预设值,若是,则扫描爬取新的代理ip加入到有效队列中。

进一步,所述任务执行步骤包括:

获取任务对应的url地址;

将url地址传递给下载器,下载器下载数据;

将下载的数据传递给数据提取逻辑器,数据提取逻辑器提取代理ip信息;

将提取到的数据保存至数据库。

进一步,所述初始校验步骤包括:

判断代理ip是否为匿名代理,若否,则判断为不可用代理ip并进行过滤;若是,则判断为可用代理ip并加入到有效队列中。

进一步,所述有效队列中还存储有各个代理ip的相关信息,所述相关信息包括请求成功率、响应速度、最近验证时间和是否匿名。

进一步,定时校验步骤中,对代理ip的请求成功率、是否匿名、响应速度以及最近验证时间进行校验。

进一步,判断代理ip是否为匿名代理具体包括:

搭建web验证服务器;

通过代理ip向验证服务器发送请求;

根据请求头判断是否包含http_x_forwarded_for且http_x_forwarded_for为请求设备的真实ip,若是,则判定代理ip为透明代理,若否,则判定代理ip为匿名代理。

进一步,所述请求成功率通过计分方式进行校验,具体包括:

给代理ip一个初始分数,如果请求成功,则对代理ip的分数进行加分;如果请求失败,则对代理ip的分数进行减分,当代理ip分数小于等于0分,则请求成功率校验不通过,将代理ip从校验列表中删除。

进一步,本申请还提供了一种高效ip代理池的实现系统,该系统采用分布式部署方式进行部署,使用了上述的高效ip代理池的实现方法。采用分布式部署确保系统高可用,便于灵活动态进行系统的调整和配置,采用分布式架构,可以将所有的爬虫分布到几十台、几百台机器上,同时获取互联网上的ip资源,所以可以保证ip代理池的规模,通过使用上述高效ip代理池的实现方法,确保系统内代理ip的时效性、稳定性。

进一步,本申请还提供了一种高效数据获取方法,该方法包括:

基于上述的高效ip代理池实现方法构建ip代理池;

设置客户端白名单;

爬虫客户端使用ip-proxy统一入口请求代理ip出口;

爬虫客户端通过代理ip完成数据获取。

通过使用上述的ip代理池,在数据爬取时,可以确保代理ip的稳定性,保证代理ip的质量,进而保证数据抓取过程的稳定,加快数据爬取速度和效率,实现高效数据获取。

进一步,对代理ip响应速度的校验具体包括以下步骤:

构建校验中间件;

通过代理ip加载校验中间件;

计算从加载请求到请求成功所花费的时间作为代理ip的响应速度。

基于中间件来检测代理ip的相应速度,进而确保有效队列中代理ip的响应速度在合格的范围内。

附图说明

图1为本申请一种高效ip代理池的实现方法实施例中的流程图。

具体实施方式

下面通过具体实施方式进一步详细说明:

实施例一

如图1所示,本实施例的一种高效ip代理池的实现方法,该方法应用基于对应的高效ip代理池系统,该系统采用基于scrapy和redis的分布式技术根据实际情况进行分布式部署,系统运行过程中,执行上述的高效ip代理池的实现方法,该系统包括调度器、爬虫模块、启动模块、地址池模块、校验模块、扫描模块以及分配模块,所述启动模块用于启动调度器以及其他模块,如各种类型的爬虫模块等,地址池模块基于scrapy和redis框架,用于存储大量的代理ip,校验模块用于对初始队列、有效队列以及校验队列中的代理ip进行校验;扫描模块用于定期对有效队列中的代理ip数量进行监测,若数量过少,则扫描或抓取新的ip资源到地址池模块中。

本实施例一种高效ip代理池的实现方法具体执行实施时,包括以下内容:

系统启动,进行系统初始化,启动各个调度器以及应用程序,包括代理爬虫调度器、校验爬虫调度器、各个代理ip采集爬虫程序、各个代理ip校验器程序等。

任务构建步骤:代理爬虫调度器读取文件,从文件中获取待爬取的网站url并将待爬取的url编排成任务加入每个任务队列中;

任务执行步骤:代理ip采集爬虫到任务队列中获取任务并执行,将获取到结果中的代理ip存入初始队列中;

初始校验步骤:代理ip校验器对初始队列中的代理ip进行校验,过滤不可用代理ip,该不可用代理ip主要指的是非匿名代理ip,即透明代理,并将匿名代理ip作为可用代理ip加入到有效队列中;

定时校验步骤:校验爬虫调度器定时从有效队列中获取代理ip并存入一个校验队列中,并由代理ip校验器程序从校验队列中获取代理ip进行校验,根据校验结果将代理ip删除或放回有效队列中;初始队列、有效队列、校验队列中还存储有各个代理ip的相关信息,所述相关信息包括请求成功率、响应速度、最近验证时间和是否匿名等信息。

代理分配步骤:根据代理ip的校验结果和客户端请求,为客户端分配代理ip。

维护判断步骤:定期检测有效队列中的代理ip数量是否小于预设值,若是,则通过任务构建步骤、任务执行步骤和初始校验步骤等爬取新的代理ip或重新扫描数据库中的代理ip资源加入到有效队列中。

以下针对每个步骤进行详细的阐述:

任务执行步骤具体包括:

获取任务对应的url地址;

将url地址传递给下载器,下载器下载数据;

将下载的数据传递给数据提取逻辑器,数据提取逻辑器提取代理ip信息;

将提取到的结构化保存数据的item数据对象经过itempipeline保存在redis数据库。

所述初始校验步骤包括:

判断代理ip是否为匿名代理,若否,则判断为不可用代理ip并进行过滤;若是,则判断为可用代理ip并加入到有效队列中。

定时校验步骤中,对代理ip的请求成功率、是否匿名、响应速度以及最近验证时间进行校验。

初始校验步骤和定时校验步骤中,判断代理ip是否为匿名代理具体包括:

搭建web验证服务器;

通过代理ip向验证服务器发送请求;

根据请求头判断是否包含http_x_forwarded_for且http_x_forwarded_for为请求设备的真实ip,若是,则判定代理ip为透明代理,若否,则判定代理ip为匿名代理。

定时校验步骤中,请求成功率通过计分方式进行校验,具体包括:

给代理ip一个初始分数,如果请求成功,则对代理ip的分数进行加分;如果请求失败,则对代理ip的分数进行减分,当代理ip分数小于等于0分,则请求成功率校验不通过,将代理ip从校验列表中删除。

本实施例中,每次加分和减分的分值为一分,但是为了防止加分时,代理ip的分数短时间急剧增大,在分数大于一定阈值s后就对其进行更平滑的加分处理,具体为每次加分的分数减少,具体加分的分值根据round(s/score)来确定。

本实施中,请求失败也会做进一步的判断,如果是代理ip端口关闭,则直接删除该代理ip,若请求超时,则进行减分操作,这么做可以避免对端口关闭的代理ip进行重复校验,减轻代理ip校验器的负担。

对代理ip响应速度的校验具体包括以下步骤:

构建校验中间件;

通过代理ip加载校验中间件;

计算从加载请求到请求成功所花费的时间作为代理ip的响应速度。

最近验证时间在每次验证通过后存储在数据库中,本实施中使用redis的zset数据结构来存储它。定时校验时,会对相应速度和最近验证时间进行校验,对于响应速度大于预设值的代理ip以及最近验证时间与当前时间差值大于预设值的代理ip会被删除丢弃,从互联网上采集的免费代理ip大多数是短效的,所以对代理ip对应的最近验证时间是一个很重要的参考标准,基于响应速度和最近校验时间与请求成功率一起作为权衡代理ip稳定性的标准。

本实施例还提供了一种高效数据获取方法,该方法包括:

基于上述的高效ip代理池实现方法构建ip代理池;

设置客户端白名单;

爬虫客户端使用ip-proxy统一入口请求代理ip出口;支持每次请求随机一个ip出口,或者多次请求使用同一个ip作为出口;

爬虫客户端通过代理ip完成数据获取。

实施例二

本实施例与实施例一的区别在于,本实施例中,初始校验步骤中的代理ip校验器与定时校验步骤中的代理ip校验器不同,其主要用于过滤透明代理。

实施例三

本实施例与实施例二的区别在于,代理ip校验器程序可以采用通用校验方法,也可以针对不同爬虫的目标网站进行定制化设置,本实施例中,针对目标完整的不同,设置不同的代理ip校验器,即包括代理ip校验器生成步骤,获取目标网站的网络参数,包括服务器ip,页面类型、数据包大小,针对分布式的目标网站,则采集其全国的服务器节点;校验时,采用分布式测试方式,全国设置多个测试节点,每个测试节点均搭建有测试web服务器和中间件等服务,首先选择与代理ip最近的服务器节点作为目标节点,根据目标节点的ip地址,选取与之最近的测试节点作为代理ip校验器进行校验的目标地址。

实施例四

本实施例与实施例三的区别在于,数据库中会存储有每个代理ip对不同的目标网站的测试结果,代理分配步骤中根据客户端请求,选择与其目标网站相同的最优代理ip分配给客户端。

实施例五

任务执行步骤中,代理ip采集爬虫采集代理ip信息时,判断是有有效队列中已有多个有效的代理ip,若是则使用已有的有效队列中的代理ip进行代理,来爬取代理ip,若否,通过请求头构造自己为透明代理,随机生成源ip,并将http_x_forwarded_for设置为源ip,进而避免反复抓取数据而被封禁。

以上的仅是本发明的实施例,该发明不限于此实施案例涉及的领域,方案中公知的具体结构及特性等常识在此未作过多描述,所属领域普通技术人员知晓申请日或者优先权日之前发明所属技术领域所有的普通技术知识,能够获知该领域中所有的现有技术,并且具有应用该日期之前常规实验手段的能力,所属领域普通技术人员可以在本申请给出的启示下,结合自身能力完善并实施本方案,一些典型的公知结构或者公知方法不应当成为所属领域普通技术人员实施本申请的障碍。应当指出,对于本领域的技术人员来说,在不脱离本发明结构的前提下,还可以作出若干变形和改进,这些也应该视为本发明的保护范围,这些都不会影响本发明实施的效果和专利的实用性。本申请要求的保护范围应当以其权利要求的内容为准,说明书中的具体实施方式等记载可以用于解释权利要求的内容。

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