代理IP池如何维护

作者:IPIDEA

2021-01-05 17:10:37

在爬取数据的时候,遇到了IP无法访问公开数据杀的情况。为了顺利开展工作,会选用代理IP,以下分享爬虫工作经验,IPIDEA全球HTTP对代理IP池的维护提供一些见解。


 8.291.png


在使用代理ip之前,需要先了解:

 

一:对返回ip格式的操作

 

json格式的数据可以直接请求后返回json数据进行操作包过提取,删除,增加。当然,在实际使用ip代理的时候好先在浏览器中请求一次,复制下来新建一个py文件练习对其操作。

 

二:ip的有效期

 

现在大部分的ip代理都是有有效期的,1-5分钟的有效期当ip失效后你需要将此ip从ip池中删除。当ip不够的时候又要引入新的ip添加到当前的ip池中。要动态维护ip池。

 

三:python3使用代理ip的方式

 

以前我的python3使用代理ip也有格式,你爬取的是http用http,是https用https就行。

 

四:异常处理

 

再写爬虫的时候一定要对所有可能产生异常的操作进行try except的异常处理。异常又要注意是否为超时异常,还是ip不可用,过期的异常,还是操作dom树的时候产生的异常。不同的异常要采用不同的策略。(可用状态码,全局变量判断)。

 

五:分析目标网站对ip的需求

 

你需要设置ip池的小和请求ip的个数不至于太大或太小,可以预先测试。打个比方你爬的网站同一个时段10个ip全球住宅IP,高效采集公开数据就不够了。你不至于开100个ip去爬吧,ip过期而没咋么用就是对资源的浪费。

 

解决方向:

 

先写个小程序操作返回的json数据测试。

 

设置全局的列表ipdate[],全局的一个msg{}字典(其实字典就是列表中随机选的一个ip和端口,只不过通过记录标记可以很好的进行删除操作)。

 

将请求ip的操作添加到全局列表(数组)中写成一个loadip()函数,以便判断ip不够时候即使添加(列表extend方法了解下,不是append)。

 

写一个随机选ip的函数getproxies(),全球住宅IP,高效采集公开数据proxies{}里面的内容。同时msg也要全球住宅IP,高效采集公开数据。注意python函数改变全局变量需要在函数里先global msg声明。每次进行http(s)请求前执行一次更新操作。

 

所有的操作都在try excpet操作,对不同的异常采用不同处理。比如(有的因为ip异常没爬到需要从爬,而有的因为dom结构异常就需要跳过)。

 

当然实际处理可能会遇到各种问题,比如页面跳转重定向,ssl证书,有的网站也会卡浏览器名称,或者cookie。这里不做过多介绍了。


*ipidea提供的服务必须在境外网络环境下使用

热门资讯