专栏首页Python小白进阶之旅做一个简单的IP代理池

做一个简单的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()

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


缺陷:

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

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

下面贴上代码:

本文分享自微信公众号 - Python雁横(py_0123)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 13个web安全-python网络测试工具+白帽黑客必备,大神整理,小白可以先收藏起来

    Python有很多完善可用的库,这里面就包含渗透测试工具,所以广大白帽黑客大多都使用Python语言,这样更有利于利用Python提供的这些库参与漏洞研究、逆向...

    用户1682544
  • Python学习资料免费下载

    用户1682544
  • Python盗号原理-代码实现截屏键盘记录远程发送-不要做坏事-木马外挂学习使用

    这年头盗号的从出不穷,不是脱裤就是社工钓鱼。今天呢我们就以前面的几篇技术文章做铺垫,来讲一下python盗号的原理(学习用途,请勿用于违法犯罪),知己知彼方能百...

    用户1682544
  • springcloud获取nginx反向代理后浏览器的真实ip

    似水的流年
  • 调用python-nmap实现扫描局域网

    使用环境:Raspberry 3b+ +netifaces+python-nmap+nmap

    py3study
  • 用Python爬虫抓取免费代理IP

    -- Illustrations by Ash Thorp & Maciej Kuciara --

    Python中文社区
  • java根据ip地址获取城市地域信息

    码农笔录
  • Python CIDR地址块算法

    最近写扫描器有个模块需要把CIDR地址块(类似与192.168.1.1/24)之类的地址解析成IP地址。

    V站CEO-西顾
  • django request 获取请求的 IP 地址

    KEVINGUO_CN
  • java根据ip地址获取城市地域信息

    用户2235302

扫码关注云+社区

领取腾讯云代金券