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.       
目录
相关文章
|
17天前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
90 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
4天前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
32 20
|
1月前
|
存储 NoSQL 数据库连接
在Python程序中实现LevelDB的海量key的分批次扫描
通过本文的步骤,您可以在Python程序中实现对LevelDB海量key的分批次扫描。这样不仅能够有效地管理大规模数据,还可以避免一次性加载过多数据到内存中,提高程序的性能和稳定性。希望这篇指南能为您的开发工作提供实用的帮助。
74 28
|
2月前
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
85 6
|
2月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
2月前
|
Shell 开发工具 Python
如何在vim里直接运行python程序
如何在vim里直接运行python程序
|
7月前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
94 3
|
3月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
4月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
3月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
46 0

热门文章

最新文章