使用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文件写入实例分析
Apr 08 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
python中OrderedDict的使用方法详解
May 05 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
python 实现在Excel末尾增加新行
May 02 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
python使用递归的方式建立二叉树
Jul 03 Python
Django之路由层的实现
Sep 09 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
PHP 5.0 Pear安装方法
2006/12/06 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
Python3中使用PyMongo的方法详解
2017/07/28 Python
使用tensorflow实现线性回归
2018/09/08 Python
python实现矩阵打印
2019/03/02 Python
详解Python循环作用域与闭包
2019/03/21 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
大学秋游活动方案
2014/02/11 职场文书
文明班级申报材料
2014/12/24 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
离婚被告代理词
2015/05/23 职场文书