小白也能做的IP代理池,好久没更新了,不知道你们想看什么呢!

IP代理池制作

GitHub主页:

https://github.com/hfldqwe/

使用工具:

ip代理抓取: requests后台搭建: Django+Redis

代理检测:

ip地址查询:http://ip.chinaz.com/这个网站提供的接口:http://ip.chinaz.com/getip.aspx

代理抓取地址:

西刺代理:http://www.xicidaili.com/nn/ + num

设计思路

爬取代理ip,获取如下信息:

IP地址

端口

服务器地址

类型

是否匿名

类型

存活时间

验证时间

分别在Redis中和ip查询接口中,验证代理,成功则计算过期时间,并进行分类。

将状态,类型,过期时间分别写入Redis。

达成目标

每隔15分钟进行爬取

ip代理自动去重

提供Python的调用的接口,和http接口

保证代理的高可用,在每次调用的时候验证代理可靠性

使用方法:

在后台运行ip_proxies.py这个文件,每隔十五分钟更新代理

在文件中导入或者继承ip_proxies.py中的AgentIpPool模块,有以下几个方法:

get_one(type)

type可以是 "http" 或者 "https",随机返回一个可用的代理,格式是:127.0.0.1:8000

get_all(type)

和上面是一样的,只是返回所有的而已,但是测试发现有一点问题

以下是可以重写修改的方法

save_ip(ip_dict)

给一个ip字典作为参数,进行分类保存

get_ip(num)

给一个页数返回一个集合,灭每个元素是一个元组,记录着代理的信息

verify_http(ip,port,timeout=3)

三个参数,返回一个布尔值用来验证代理是否可用,同样有verify_https(self,ip,port,timeout=3)用来验证https代理是否可用

filter_in_web(ip_set)

参数是一个由包含着ip信息的元组组成的集合调用了verify_http和verify_https判断代理是否可用

filter_one(able_ip,func)

用来取出代理时候进行的验证able_ip是从redis中取出的ip,func是使用这个方法的方法,也就是在get_one中就是get_one,在get_all中就是get_all

filter_all(able_ip,func)

同上

able_ip

是上面所说的able_ip组成的集合

write_pool()

对之前的一个封装,这里也是最需要改进的地方。

缺陷:

缺陷很明显,以下几个地方需要改进:

异步处理:这个没有做异步,为什么呢?因为我还不是很熟练,后面要加上去,这样就可以直接调用就行了,不用在后台运行。另外在进行爬取和验证的时候就不需要阻塞了

模块之间的逻辑:不是很清晰,需要改进逻辑方面的问题,感觉现在写的东西还是太死了,还是没有学会解耦合的思想

下面贴上代码:

最后

看到这么多代码是不是不想玩了,放心,我会给你们录个视频的。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180717A1Y8T800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券