Python 代理验证程序(For 无忧代理) 多线程版

简介: 转发-来自http://www.redicecn.com/html/Python/20101209/204.html 与之前的版本http://www.redicecn.com/html/yuanchuangchengxu/20101205/201.html相 比,这个使用了多线程。

转发-来自http://www.redicecn.com/html/Python/20101209/204.html

与之前的版本http://www.redicecn.com/html/yuanchuangchengxu/20101205/201.html相 比,这个使用了多线程。验证时间由原来的20分钟缩短到现在的1分钟左右。

 直接上源码:

与之前的版本http://www.redicecn.com/html/yuanchuangchengxu/20101205/201.html相 比,这个使用了多线程。验证时间由原来的20分钟缩短到现在的1分钟左右。

   

直接上源码:

  1. # coding:gbk  
  2. # 验证最新可用代 理 For http://www.5uproxy.net 多线程版  
  3. # by redice 2010.12.09  
  4.   
  5. import sys  
  6. reload(sys)  
  7. sys.setdefaultencoding('gbk')  
  8.   
  9.   
  10. import urllib  
  11. import urllib2  
  12. from urllib2 import URLError, HTTPError  
  13.   
  14. DEBUG = True  
  15.   
  16. #html页面下载函数  
  17. def getHtml(url,post_data=None,cookie=None):  
  18.         """Fetch the target html 
  19.         url - URL to fetch 
  20.         post_data - POST Entity 
  21.         cookie - Cookie Header 
  22.         """  
  23.         if DEBUG:  
  24.             print "getHtml: ",url  
  25.   
  26.         result =''  
  27.           
  28.         try:  
  29.             #create a request  
  30.             request = urllib2.Request(url)  
  31.   
  32.             #change User-Agent  
  33.             request.add_header('User-Agent','Mozilla/5.0')  
  34.               
  35.             #change Referrer  
  36.             request.add_header('Referrer',url)  
  37.               
  38.             #if has cookie,add cookie header  
  39.             if cookie:  
  40.                request.add_header('Cookie',cookie)  
  41.   
  42.             #create a opener  
  43.             opener = urllib2.build_opener()              
  44.              
  45.             #if has post entity  
  46.             if post_data:  
  47.                 #encode post data  
  48.                 post_data = urllib.urlencode(post_data)  
  49.                   
  50.                 response = opener.open(request,post_data)  
  51.             else:  
  52.                 response = opener.open(request)  
  53.               
  54.             result = response.read()  
  55.                   
  56.             response.close()  
  57.   
  58.             #no content,don't save  
  59.             if not result or len(result)==0:  
  60.                 return ''  
  61.               
  62.             return  result  
  63.         except HTTPError, e:  
  64.             if DEBUG:  
  65.                 print 'Error retrieving data:',e  
  66.                 print 'Server error document follows:\n'  
  67.                 #print e.read()  
  68.             return ''  
  69.         except URLError, e:  
  70.             if hasattr(e, 'reason'):  
  71.                 if DEBUG:  
  72.                     print 'Failed to reach a server.'  
  73.                     print 'Reason: ', e.reason  
  74.                 return ''  
  75.             elif hasattr(e, 'code'):  
  76.                 if DEBUG:  
  77.                     print 'The server couldn\'t fulfill the request.'  
  78.                     print 'Error code: ', e.code  
  79.                 return ''  
  80.         except Exception, e:  
  81.             if DEBUG:  
  82.                 print e  
  83.             return ''  
  84.           
  85.   
  86. #需要验证的代理列表  
  87. proxy_urls = []  
  88. proxy_urls.append({'url':'http://www.5uproxy.net/http_fast.html','type':'http_fast'})  
  89. proxy_urls.append({'url':'http://www.5uproxy.net/http_anonymous.html','type':'http_anonymous'})  
  90. proxy_urls.append({'url':'http://www.5uproxy.net/http_non_anonymous.html','type':'http_transparent'})  
  91. proxy_urls.append({'url':'http://www.5uproxy.net/socks5.html','type':'socks5'})  
  92.   
  93.   
  94. import re  
  95. import socket  
  96. import time  
  97. import threading  
  98.   
  99. result =[]  
  100.   
  101.   
  102. #线程同步锁  
  103. lock = threading.Lock()   
  104.   
  105. def synchronous(f):  
  106.     def call(*args, **kwargs):  
  107.         lock.acquire()  
  108.         try:  
  109.             return f(*args, **kwargs)  
  110.         finally:  
  111.             lock.release()  
  112.     return call  
  113.   
  114.   
  115.   
  116. # 先获取所有待验证的代理  
  117. proxies = []  
  118.   
  119. for proxy_url in proxy_urls:  
  120.     html = getHtml(proxy_url['url'])  
  121.       
  122.     #正则匹配获取每一代理  
  123.     rs = re.compile(r'''''<tr .*?>[\s\S]*?<td .*?>\d+?</td>[\s\S]*?<td>(\S+?)</td>[\s\S]*?<td .*?>(\S+?)</td>[\s\S]*?<td .*?>(\S+?)</td>[\s\S]*?</tr>''',re.DOTALL).findall(html)  
  124.       
  125.     for r in rs:  
  126.         proxy = {}  
  127.           
  128.         #代理域名  
  129.         proxy['domain'] = r[0]  
  130.         #代理端口  
  131.         proxy['port'] = r[1]  
  132.         #代理国家  
  133.         proxy['state'] = r[2]  
  134.         #代理类型  
  135.         proxy['type'] = proxy_url['type']  
  136.         #响应时间  
  137.         proxy['time'] = 0  
  138.           
  139.         if not (proxy in proxies):  
  140.             proxies.append(proxy)  
  141.   
  142.   
  143.   
  144. # 获取一个待验证代理  
  145. @synchronous  
  146. def getproxy():  
  147.     global proxies  
  148.     if len(proxies)>0:  
  149.         return proxies.pop()  
  150.     else:  
  151.         return ''  
  152.   
  153.   
  154.       
  155. #保存验证结果  
  156. @synchronous  
  157. def saveresult(proxy):  
  158.     global result  
  159.       
  160.     if not(proxy in result):  
  161.         result.append(proxy)  
  162.   
  163.   
  164. #线程函数  
  165. def verify():  
  166.       
  167.     while 1:  
  168.         proxy = getproxy()  
  169.         #所有代理均已验证完毕  
  170.         if len(proxy)==0:  
  171.             return  
  172.           
  173.         print "正在验证:%s,%s" % (proxy['domain'],proxy['port'])  
  174.           
  175.         #验证代理的可用性  
  176.         #创建一个TCP连接套接字  
  177.         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
  178.         #设置10超时  
  179.         sock.settimeout(10)  
  180.         try:  
  181.             start = time.clock()  
  182.               
  183.             #连接代理服务器  
  184.             sock.connect((proxy['domain'], int(proxy['port'])))  
  185.             proxy['time'] = int((time.clock() - start) * 1000)   
  186.             sock.close()  
  187.               
  188.             saveresult(proxy)  
  189.             print "%s,%s 验证通过,响应时间:%d ms." % (proxy['domain'],proxy['port'],proxy['time'])  
  190.         except Exception, e:  
  191.             if DEBUG:  
  192.                 print e  
  193.               
  194.             print "%s,%s 验 证失败." % (proxy['domain'],proxy['port'])  
  195.   
  196.   
  197.   
  198.   
  199. #init thread_pool   
  200. thread_pool = []  
  201.   
  202. for i in range(20):   
  203.     th = threading.Thread(target=verify,args=()) ;   
  204.     thread_pool.append(th)  
  205.   
  206. # start threads one by one           
  207. for thread in thread_pool:   
  208.     thread.start()  
  209.   
  210. #collect all threads   
  211. for thread in thread_pool:   
  212.     threading.Thread.join(thread)  
  213.   
  214.   
  215. #结果按响应时间从小到大排序  
  216.   
  217. result.sort(lambda x,y: cmp(x['time'], y['time']))    
  218.   
  219. fname = 'proxy_'+ time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time())) +'.txt'  
  220. file = open(fname,'w')  
  221.   
  222. print "验证结果如下:"  
  223. for item in result:  
  224.      str = '%s:%s   %s,%s,%d' % (item['domain'],item['port'],item['type'],item['state'],item['time'])  
  225.     print str  
  226.     file.write(str+'\n')  
  227.       
  228. file.close()  
  229.   
  230. print "所有代理已验证完 毕,共计%d个验证通过。验证通过的代理已存入%s" % (len(result),fname)  
  231.       
目录
相关文章
|
2月前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
16天前
|
存储 NoSQL 数据库连接
在Python程序中实现LevelDB的海量key的分批次扫描
通过本文的步骤,您可以在Python程序中实现对LevelDB海量key的分批次扫描。这样不仅能够有效地管理大规模数据,还可以避免一次性加载过多数据到内存中,提高程序的性能和稳定性。希望这篇指南能为您的开发工作提供实用的帮助。
59 28
|
2月前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
1月前
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
76 6
|
1月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
2月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
29天前
|
Shell 开发工具 Python
如何在vim里直接运行python程序
如何在vim里直接运行python程序
|
2月前
|
安全 Java
线程安全的艺术:确保并发程序的正确性
在多线程环境中,确保线程安全是编程中的一个核心挑战。线程安全问题可能导致数据不一致、程序崩溃甚至安全漏洞。本文将分享如何确保线程安全,探讨不同的技术策略和最佳实践。
58 6
|
2月前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
92 9
|
2月前
|
存储 人工智能 数据挖掘
Python编程入门:打造你的第一个程序
本文旨在为初学者提供Python编程的初步指导,通过介绍Python语言的基础概念、开发环境的搭建以及一个简单的代码示例,帮助读者快速入门。文章将引导你理解编程思维,学会如何编写、运行和调试Python代码,从而开启编程之旅。
59 2