使用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实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
python测试mysql写入性能完整实例
Jan 18 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
Oct 22 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
python虚拟环境迁移方法
Jan 03 Python
Django 内置权限扩展案例详解
Mar 04 Python
详解python算法之冒泡排序
Mar 05 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
python经典趣味24点游戏程序设计
Jul 26 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
Python实现照片卡通化
Dec 06 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的array_multisort()使用方法介绍
2012/05/16 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
php查看当前Session的ID实例
2015/03/16 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
Python科学计算之NumPy入门教程
2017/01/15 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
python创建子类的方法分析
2019/11/28 Python
详解python内置模块urllib
2020/09/09 Python
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
体育教育专业毕业生自荐信
2013/11/15 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
暑期社会实践方案
2014/02/05 职场文书
财政专业求职信范文
2014/02/19 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
会计学专业求职信
2014/07/17 职场文书