前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做一个简单的IP代理池

做一个简单的IP代理池

作者头像
用户1682544
发布2018-08-03 10:07:03
9090
发布2018-08-03 10:07:03
举报
文章被收录于专栏:Python小白进阶之旅

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()

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


缺陷:

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

  • 异步处理:这个没有做异步,为什么呢?因为我还不是很熟练,后面要加上去,这样就可以直接调用就行了,不用在后台运行。另外在进行爬取和验证的时候就不需要阻塞了
  • 模块之间的逻辑:不是很清晰,需要改进逻辑方面的问题,感觉现在写的东西还是太死了,还是没有学会解耦合的思想

下面贴上代码:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python雁横 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IP代理池制作
  • 设计思路
  • 达成目标
  • 使用方法:
  • 缺陷:
  • 下面贴上代码:
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档