python3 写的代理服务器验证工具

为了解决频繁手动验证代理服务器的问题,本文介绍了如何使用Python3的urllib库创建一个自动验证工具。通过抓取http://5uproxy.net/上的代理服务器信息,利用正则表达式解析IP和端口,再构造opener进行有效性检测,从而筛选出可用的代理服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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


#!/usr/bin/env python
#coding=utf-8
import urllib
import http.cookiejar 
import re
import socket
class OpenUrl:
    def __init__(self):
        self.result          = ""
        
        
    def openpage(self):                                                                                # url为相对路径 
        try:
            url = "http://www.baidu.com"
            self.result = self.opener.open(url).read().decode("gb2312")
        except urllib.error.HTTPError as ex :           
            self.mute.release()
            self.result = "openpage error: %s"%ex  
            return False
        except ssl.SSLError as ex:
            self.mute.release()
            self.result = "openage  error: %s"%ex
            return False
        
        return self.result.find("京ICP证030173号")    
            
            
    
    def getHtmlTdInfo(self, context):
        result  = []
        p = re.compile("/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3}[/w|/W]+?<td width=/"60/">/d{2,4}")
        ret = p.findall(str(context))
        
        if ret is None:
            return None
        
        for x in ret:
            element = []
            q = re.compile("^(/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3})[/w|/W]+?(/d{2,4}){1}quot;)
            subRet = q.search(x);
            if subRet==None:
                continue
            element.append(subRet.group(1))
            element.append(subRet.group(2))
            result.append(element)
        return result            
    
    
    def getAgencyIP(self,url=""):
        socket.setdefaulttimeout(20)                       #20秒内没有打开web页面,就算超时 
          
        url="http://5uproxy.net/http_fast.html"            #获取最新代理服务器
        self.result = str(urllib.request.urlopen(url).read())
        if self.result==None:
            return
        AgencyIP = self.getHtmlTdInfo(self.result)
        print(len(AgencyIP))
        
        url="http://5uproxy.net/http_anonymous.html"       #获取匿名访问代理服务器
        self.result = str(urllib.request.urlopen(url).read())
        if self.result==None:
            return
        AgencyIP += self.getHtmlTdInfo(self.result)
        print(len(AgencyIP))
        
        url="http://5uproxy.net/http_non_anonymous.html"   #获取透明访问代理服务器
        self.result = str(urllib.request.urlopen(url).read())
        if self.result==None:
            return
        AgencyIP += self.getHtmlTdInfo(self.result)
        print(len(AgencyIP))
        
        socket.setdefaulttimeout(5)                       #5内没有打开web页面,就算超时 
        if len(AgencyIP)==0:
            print("获取代理服务器失败")
            return
        for x in AgencyIP:
            if x[0]=="":
                continue
            try:
                proxy_support = urllib.request.ProxyHandler({'http':'http://'+str(x[0])+':'+str(x[1])})
                self.opener = urllib.request.build_opener(proxy_support, urllib.request.HTTPHandler)
                urllib.request.install_opener(self.opener)       
                if self.openpage()==False:
                    x[0] = ""
                    x[1] = ""
                    continue
                print("有效的代理服务器"+str(x[0])+":"+str(x[1]))
                print("等待2秒")
                time.sleep(2)       
            except:
                continue
                
                
if __name__ == "__main__":
    test = OpenUrl()
    test.getAgencyIP()
    
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值