Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4470999
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: Python/Ruby

2012-04-25 22:47:59

文章来源:http://blog.csdn.net/yatere/article/details/6674306

由于经常要使用代理服务器,而网上提供的代理服务器很多都是临时的,一个一个的手动验证费时费力,所以我就想用python3的urllib库来写一个服务器获取、验证工具。

 

    首先,要找一个提供代理服务器的网站,我用的是,这个网站的代理服务器几乎每天都更新,所以效果应该是比较好的。 我的思路是,先打开这个网站的页面,将页面的信息down下来,然后用正则表达式分析,找出其中的代理服务器和端口号,再用 urllib.request.build_opener构造一个使用该代理服务器的opener,然后用这个opener去打开百度的页面,探测获取到 的信息是否正确,如果正确,就说明代理服务器有效,输出代理服务器的IP、端口即可。


  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. import urllib
  4. import http.cookiejar
  5. import re
  6. import socket
  7. class OpenUrl:
  8.     def __init__(self):
  9.         self.result = ""
  10.         
  11.         
  12.     def openpage(self): # url为相对路径
  13.         try:
  14.             url = ""
  15.             self.result = self.opener.open(url).read().decode("gb2312")
  16.         except urllib.error.HTTPError as ex :
  17.             self.mute.release()
  18.             self.result = "openpage error: %s"%ex
  19.             return False
  20.         except ssl.SSLError as ex:
  21.             self.mute.release()
  22.             self.result = "openage error: %s"%ex
  23.             return False
  24.         
  25.         return self.result.find("京ICP证030173号")
  26.             
  27.             
  28.     
  29.     def getHtmlTdInfo(self, context):
  30.         result = []
  31.         p = re.compile("/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3}[/w|/W]+?60/">/d{2,4}")
  32.         ret = p.findall(str(context))
  33.         
  34.         if ret is None:
  35.             return None
  36.         
  37.         for x in ret:
  38.             element = []
  39.             q = re.compile("^(/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3})[/w|/W]+?(/d{2,4}){1}quot;)
  40.             subRet = q.search(x);
  41.             if subRet==None:
  42.                 continue
  43.             element.append(subRet.group(1))
  44.             element.append(subRet.group(2))
  45.             result.append(element)
  46.         return result
  47.     
  48.     
  49.     def getAgencyIP(self,url=""):
  50.         socket.setdefaulttimeout(20) #20秒内没有打开web页面,就算超时
  51.           
  52.         url="http://5uproxy.net/http_fast.html" #获取最新代理服务器
  53.         self.result = str(urllib.request.urlopen(url).read())
  54.         if self.result==None:
  55.             return
  56.         AgencyIP = self.getHtmlTdInfo(self.result)
  57.         print(len(AgencyIP))
  58.         
  59.         url="http://5uproxy.net/http_anonymous.html" #获取匿名访问代理服务器
  60.         self.result = str(urllib.request.urlopen(url).read())
  61.         if self.result==None:
  62.             return
  63.         AgencyIP += self.getHtmlTdInfo(self.result)
  64.         print(len(AgencyIP))
  65.         
  66.         url="http://5uproxy.net/http_non_anonymous.html" #获取透明访问代理服务器
  67.         self.result = str(urllib.request.urlopen(url).read())
  68.         if self.result==None:
  69.             return
  70.         AgencyIP += self.getHtmlTdInfo(self.result)
  71.         print(len(AgencyIP))
  72.         
  73.         socket.setdefaulttimeout(5) #5内没有打开web页面,就算超时
  74.         if len(AgencyIP)==0:
  75.             print("获取代理服务器失败")
  76.             return
  77.         for x in AgencyIP:
  78.             if x[0]=="":
  79.                 continue
  80.             try:
  81.                 proxy_support = urllib.request.ProxyHandler({'http':'http://'+str(x[0])+':'+str(x[1])})
  82.                 self.opener = urllib.request.build_opener(proxy_support, urllib.request.HTTPHandler)
  83.                 urllib.request.install_opener(self.opener)
  84.                 if self.openpage()==False:
  85.                     x[0] = ""
  86.                     x[1] = ""
  87.                     continue
  88.                 print("有效的代理服务器"+str(x[0])+":"+str(x[1]))
  89.                 print("等待2秒")
  90.                 time.sleep(2)
  91.             except:
  92.                 continue
  93.                 
  94.                 
  95. if __name__ == "__main__":  
  96.     test = OpenUrl()  
  97.     test.getAgencyIP() 


阅读(1096) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~