Python采集代理ip并判断是否可用和定时更新的方法


Posted in Python onMay 07, 2018

网上有很多免费的ip地址,都是可以使用的,但是如果手动来获取太麻烦,这里通过Python自动抓取,可以批量获取。

代码如下:

# -*- coding: utf-8 -*-
import re
import urllib2
import json
import os
import time
import socket

class ProxyIp(object):
  def __init__(self):
    self.path = os.path.split(os.path.realpath(__file__))[0]
  # Get latest proxy ip and download to json
  def update_ip(self):
    print 'Update Ip'
    url = 'http://www.ip3366.net/free/'
    req = urllib2.Request(url)
    response = urllib2.urlopen(req)
    matches = re.findall(
      ur'(\d+.\d+.\d+.\d+)</td>\s+<td>(\d+)</td>\s+<td>.*?</td>\s+<td>(HTTPS?)</td>',
      response.read(),
      re.I
    )
    ls = []
    for match in matches:
      if self.is_open(match[0], match[1]):
        ls.append({'ip':match[0], 'port':match[1], 'protocol': match[2]})
    with open('%s/ip.json' % self.path, 'w') as f:
      json.dump(ls, f)
    return ls
  # whether the ips is last or old.
  def is_last(self):
    m_time = int(os.path.getmtime('%s/ip.json' % self.path))
    now_time = int(time.time())
    return (now_time - m_time) > 60*60*4 # 4 hours
  @staticmethod
  def is_open(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
      s.connect(ip, int(port))
      return True
    except:
      print 'Faild IP: %s:%s' % (ip, port)
      return False
  def get_proxy_ips(self):
    if not self.is_last():
      return self.update_ip()
    else:
      with open('%s/ip.json' % self.path, 'r') as f:
        return json.load(f)

以上这篇Python采集代理ip并判断是否可用和定时更新的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
python通过tcp发送xml报文的方法
Dec 28 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
tensorflow 限制显存大小的实现
Feb 03 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
python实现图像拼接功能
Mar 23 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
Django REST 异常处理详解
Jul 15 Python
浅析Python 多行匹配模式
Jul 24 Python
python七种方法判断字符串是否包含子串
Aug 18 Python
利用python的socket发送http(s)请求方法示例
May 07 #Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 #Python
Python视频爬虫实现下载头条视频功能示例
May 07 #Python
十分钟利用Python制作属于你自己的个性logo
May 07 #Python
Redis使用watch完成秒杀抢购功能的代码
May 07 #Python
Python文本统计功能之西游记用字统计操作示例
May 07 #Python
Python中的函数作用域
May 07 #Python
You might like
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
Python栈类实例分析
2015/06/15 Python
Python单链表简单实现代码
2016/04/27 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
python合并同类型excel表格的方法
2018/04/01 Python
python返回数组的索引实例
2019/11/28 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
Weblogc domain问题
2014/01/27 面试题
两年的个人工作自我评价
2014/01/10 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
党内外群众意见范文
2015/06/02 职场文书
民主生活会意见
2015/06/05 职场文书
关于职业道德的心得体会
2016/01/18 职场文书