客服电话
17728153743爬虫工作中,遇到访问太频繁ip被封是难以避免的,而本地单个ip是不足以完成大规模爬取,今天给大家简单说一个搭建代理ip池的方法。代理池主要由四部分组成:ProxyGeter(代理获取模块)、RedisClient(代理管理模块,负责存储、删除、取出等基本操作)、Texter(代理可用性测试模块)和Web_Api(用户获取模块)。
一、ProxyGeter
从网络上爬取最新的代理,并把代理存储到redis数据库中。
二、RedisClient
主要实现ip的删、减、增等基本操作,采用reids的几方面原因如下:
1、redis的hash数据结构可以为ip的有效性(根据可用性分为0-100)进行评分;
2、redis提供的key-value更方便地储存IP;
3、对于ip的存储、提取、删除、查询数量等功能会更加地快捷。
三、Texter
模块主要目的是检测ip的可用性。提前设置好需要检测的网站站点,然后随机取出数据库中的代理,用获取到的ip来访问目标网站:
1、若访问无效,首先降低ip的分数等级(减10),其次做判断:若该ip的分数等级低于10分直接从reids数据库中删除;
2、若访问有效,首先增加ip的分数等级(加10),其次更新reids中该ip的分数等级。
四、Web_Api
为了让用户获取可用性ip更加方便一点,这里利用flask框架做了一个API,这个接口连接着redis数据库;当打开这个api开关时,直接从redis数据库中随机获取一个分数等级高的ip,用户可以通过访问这个接口(提供的url)就可以获取相应的IP代理。
这四个模块时彼此独立的(例如,当检测一个ip不可用时,需要调用RedisClient来从数据库中删除这个ip),因此还需要引入Schedule来进行协调。