使用python验证代理ip是否可用的实现方法


Posted in Python onJuly 25, 2018

在使用爬虫爬取网络数据时,如果长时间对一个网站进行抓取时可能会遇到IP被封的情况,这种情况可以使用代理更换ip来突破服务器封IP的限制。

随手在百度上搜索免费代理IP,可以得到一系列的网站,这里我们通过对西刺网站的抓取来举例。

通过编写一个爬虫来抓取网站上面的IP地址,端口,及类型,把这些信息存到本地。这里不做介绍。

验证代理IP是否可用。原理是使用代理IP访问指定网站,如果返回状态为200,表示这个代理是可以使用的。

# _*_ coding:utf-8 _*_
import urllib2
import re
class TestProxy(object):
  def __init__(self):
    self.ip = '106.46.136.64'
    self.port = '808'
    self.url = 'http://www.baidu.com'
    self.timeout = 3
    self.regex = re.compile(r'baidu.com')
    self.run()
  def run(self):
    self.linkWithProxy()
  def linkWithProxy(self):
    server = 'http://'+ self.ip + ':'+ self.port
    opener = urllib2.build_opener(urllib2.ProxyHandler({'http':server}))
    urllib2.install_opener(opener)
    try:
      response = urllib2.urlopen(self.url, timeout=self.timeout)
    except:
      print '%s connect failed' % server
      return
    else:
      try:
        str = response.read()
      except:
        print '%s connect failed' % server
        return
      if self.regex.search(str):
        print '%s connect success .......' % server
        print self.ip + ':' + self.port
if __name__ == '__main__':
  Tp = TestProxy()

也可以使用requests包来进行验证,要少写好多代码

import requests
try:
  requests.get('http://wenshu.court.gov.cn/', proxies={"http":"http://121.31.154.12:8123"})
except:
  print 'connect failed'
else:
  print 'success'

把验证通过的IP保存在redis里面,在IP被禁止的时候可以从redis中取出来使用。

受@齐俊杰的提醒,添加一种使用telnet来验证的方法:

import telnetlib
try:
  telnetlib.Telnet('127.0.0.1', port='80', timeout=20)
except:
  print 'connect failed'
else:
  print 'success'

总结

以上所述是小编给大家介绍的使用python验证代理ip是否可用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python读取环境变量的方法和自定义类分享
Nov 22 Python
Python简单删除列表中相同元素的方法示例
Jun 12 Python
python中urlparse模块介绍与使用示例
Nov 19 Python
Python实现的微信支付方式总结【三种方式】
Apr 13 Python
为什么说Python可以实现所有的算法
Oct 04 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
Python Selenium截图功能实现代码
Apr 26 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
Python打包为exe详细教程
May 18 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 Python
Python+Pandas 获取数据库并加入DataFrame的实例
Jul 25 #Python
python requests 测试代理ip是否生效
Jul 25 #Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 #Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 #Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 #Python
python中的常量和变量代码详解
Jul 25 #Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 #Python
You might like
学习使用PHP数组
2006/10/09 PHP
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
初学JavaScript第二章
2008/09/30 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
2018/10/20 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
JS删除数组指定值常用方法详解
2020/06/04 Javascript
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
Python程序设计入门(3)数组的使用
2014/06/16 Python
python自动zip压缩目录的方法
2015/06/28 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
2019/05/15 Python
Django models.py应用实现过程详解
2019/07/29 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
几个MySql的面试题
2013/04/22 面试题
工厂会计员职责
2014/02/06 职场文书
美术指导求职信
2014/03/17 职场文书
员工入职担保书范文
2014/04/01 职场文书
工作调动申请报告
2015/05/18 职场文书
肖申克救赎观后感
2015/06/02 职场文书