使用python验证代理ip是否可用的实现方法,利用Python爬取可用的代理IP

前言

在运用爬虫爬取互联网数据时,假如长日子对二个网址开展抓取时大概会遇上IP被封的动静,这种气象能够动用代理退换ip来突破服务器封IP的限定。

就以近些日子意识的多少个无需付费代理IP网址为例:

顺手在百度上探索免费代理IP,可以得到一文山会海的网址,这里大家经过对西刺网址的抓取来比喻。

由此用Python写了个本子,该脚本得以把能用的代理IP检测出来。

经过编写制定贰个爬虫来抓取网站上边包车型大巴IP地址,端口,及项目,把那几个消息存到当地。这里不做牵线。

剧本如下:

说西魏理IP是不是可用。原理是采纳代理IP访谈内定网址,假诺回到状态为200,表示这些代理是能够运用的。

#encoding=utf8
import urllib2
from bs4 import BeautifulSoup
import urllib
import socket

User_Agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
header = {}
header['User-Agent'] = User_Agent

'''
获取所有代理IP地址
'''
def getProxyIp():
 proxy = []
 for i in range(1,2):
  try:
   url = 'http://www.xicidaili.com/nn/'+str(i)
   req = urllib2.Request(url,headers=header)
   res = urllib2.urlopen(req).read()
   soup = BeautifulSoup(res)
   ips = soup.findAll('tr')
   for x in range(1,len(ips)):
    ip = ips[x]
    tds = ip.findAll("td")
    ip_temp = tds[1].contents[0]+"\t"+tds[2].contents[0]
    proxy.append(ip_temp)
  except:
   continue
 return proxy

'''
验证获得的代理IP地址是否可用
'''
def validateIp(proxy):
 url = "http://ip.chinaz.com/getip.aspx"
 f = open("E:\ip.txt","w")
 socket.setdefaulttimeout(3)
 for i in range(0,len(proxy)):
  try:
   ip = proxy[i].strip().split("\t")
   proxy_host = "http://"+ip[0]+":"+ip[1]
   proxy_temp = {"http":proxy_host}
   res = urllib.urlopen(url,proxies=proxy_temp).read()
   f.write(proxy[i]+'\n')
   print proxy[i]
  except Exception,e:
   continue
 f.close()


if __name__ == '__main__':
 proxy = getProxyIp()
 validateIp(proxy)
# _*_ 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()

 运营成功后,展开E盘下的文件,能够看出如下可用的代办IP地址和端口:

也能够运用requests包来开展验证,要少写过多代码

图片 1

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中抽出来使用。

那只是爬取的第风流罗曼蒂克页的IP地址,如有需求,能够多爬取几页。同期,该网址是任何时候更新的,提议爬取时只爬取前几页的就可以。以上正是本文的全部内容,希望对大家学习使用Python能具有利于。

受@齐俊杰的唤醒,加多生机勃勃种选择telnet来注明的方法:

您或者感兴趣的稿子:

  • Python爬虫代理IP池完毕情势
  • 透过Python爬虫代理IP快捷扩展博客阅读量
  • Python达成检查测验代理IP是还是不是足以翻墙
  • 接收python验证代理ip是不是可用的实现格局
import telnetlib
try:
  telnetlib.Telnet('127.0.0.1', port='80', timeout=20)
except:
  print 'connect failed'
else:
  print 'success'

总结

如上所述是作者给大家介绍的应用python验证代理ip是不是可用,希望对我们全部利于,若是大家有任何疑问请给自家留言,作者会及时过来大家的。在这里也极其感激我们对剧本之家网址的支撑!

你大概感兴趣的作品:

  • Python爬虫代理IP池达成形式
  • 通过Python爬虫代理IP快捷扩展博客阅读量
  • 选择Python爬取可用的代理IP
  • Python落成检测代理IP是还是不是能够翻墙

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注