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()
对之前的一个封装,这里也是最需要改进的地方。
缺陷:
缺陷很明显,以下几个地方需要改进:
异步处理:这个没有做异步,为什么呢?因为我还不是很熟练,后面要加上去,这样就可以直接调用就行了,不用在后台运行。另外在进行爬取和验证的时候就不需要阻塞了
模块之间的逻辑:不是很清晰,需要改进逻辑方面的问题,感觉现在写的东西还是太死了,还是没有学会解耦合的思想
下面贴上代码:
最后
看到这么多代码是不是不想玩了,放心,我会给你们录个视频的。
领取专属 10元无门槛券
私享最新 技术干货