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

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

直接上源码:

proxy_verify.zip

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

直接上源码:

proxy_verify.zip

  1. # coding:gbk
  2. # 验证最新可用代 理 For http://www.5uproxy.net 多线程版
  3. # by redice 2010.12.09
  4. import sys
  5. reload(sys)
  6. sys.setdefaultencoding('gbk')
  7. import urllib
  8. import urllib2
  9. from urllib2 import URLError, HTTPError
  10. DEBUG = True
  11. #html页面下载函数
  12. def getHtml(url,post_data=None,cookie=None):
  13. """Fetch the target html
  14. url - URL to fetch
  15. post_data - POST Entity
  16. cookie - Cookie Header
  17. """
  18. if DEBUG:
  19. print "getHtml: ",url
  20. result =''
  21. try:
  22. #create a request
  23. request = urllib2.Request(url)
  24. #change User-Agent
  25. request.add_header('User-Agent','Mozilla/5.0')
  26. #change Referrer
  27. request.add_header('Referrer',url)
  28. #if has cookie,add cookie header
  29. if cookie:
  30. request.add_header('Cookie',cookie)
  31. #create a opener
  32. opener = urllib2.build_opener()
  33. #if has post entity
  34. if post_data:
  35. #encode post data
  36. post_data = urllib.urlencode(post_data)
  37. response = opener.open(request,post_data)
  38. else:
  39. response = opener.open(request)
  40. result = response.read()
  41. response.close()
  42. #no content,don't save
  43. if not result or len(result)==0:
  44. return ''
  45. return  result
  46. except HTTPError, e:
  47. if DEBUG:
  48. print 'Error retrieving data:',e
  49. print 'Server error document follows:\n'
  50. #print e.read()
  51. return ''
  52. except URLError, e:
  53. if hasattr(e, 'reason'):
  54. if DEBUG:
  55. print 'Failed to reach a server.'
  56. print 'Reason: ', e.reason
  57. return ''
  58. elif hasattr(e, 'code'):
  59. if DEBUG:
  60. print 'The server couldn\'t fulfill the request.'
  61. print 'Error code: ', e.code
  62. return ''
  63. except Exception, e:
  64. if DEBUG:
  65. print e
  66. return ''
  67. #需要验证的代理列表
  68. proxy_urls = []
  69. proxy_urls.append({'url':'http://www.5uproxy.net/http_fast.html','type':'http_fast'})
  70. proxy_urls.append({'url':'http://www.5uproxy.net/http_anonymous.html','type':'http_anonymous'})
  71. proxy_urls.append({'url':'http://www.5uproxy.net/http_non_anonymous.html','type':'http_transparent'})
  72. proxy_urls.append({'url':'http://www.5uproxy.net/socks5.html','type':'socks5'})
  73. import re
  74. import socket
  75. import time
  76. import threading
  77. result =[]
  78. #线程同步锁
  79. lock = threading.Lock()
  80. def synchronous(f):
  81. def call(*args, **kwargs):
  82. lock.acquire()
  83. try:
  84. return f(*args, **kwargs)
  85. finally:
  86. lock.release()
  87. return call
  88. # 先获取所有待验证的代理
  89. proxies = []
  90. for proxy_url in proxy_urls:
  91. html = getHtml(proxy_url['url'])
  92. #正则匹配获取每一代理
  93. 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)
  94. for r in rs:
  95. proxy = {}
  96. #代理域名
  97. proxy['domain'] = r[0]
  98. #代理端口
  99. proxy['port'] = r[1]
  100. #代理国家
  101. proxy['state'] = r[2]
  102. #代理类型
  103. proxy['type'] = proxy_url['type']
  104. #响应时间
  105. proxy['time'] = 0
  106. if not (proxy in proxies):
  107. proxies.append(proxy)
  108. # 获取一个待验证代理
  109. @synchronous
  110. def getproxy():
  111. global proxies
  112. if len(proxies)>0:
  113. return proxies.pop()
  114. else:
  115. return ''
  116. #保存验证结果
  117. @synchronous
  118. def saveresult(proxy):
  119. global result
  120. if not(proxy in result):
  121. result.append(proxy)
  122. #线程函数
  123. def verify():
  124. while 1:
  125. proxy = getproxy()
  126. #所有代理均已验证完毕
  127. if len(proxy)==0:
  128. return
  129. print "正在验证:%s,%s" % (proxy['domain'],proxy['port'])
  130. #验证代理的可用性
  131. #创建一个TCP连接套接字
  132. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  133. #设置10超时
  134. sock.settimeout(10)
  135. try:
  136. start = time.clock()
  137. #连接代理服务器
  138. sock.connect((proxy['domain'], int(proxy['port'])))
  139. proxy['time'] = int((time.clock() - start) * 1000)
  140. sock.close()
  141. saveresult(proxy)
  142. print "%s,%s 验证通过,响应时间:%d ms." % (proxy['domain'],proxy['port'],proxy['time'])
  143. except Exception, e:
  144. if DEBUG:
  145. print e
  146. print "%s,%s 验 证失败." % (proxy['domain'],proxy['port'])
  147. #init thread_pool
  148. thread_pool = []
  149. for i in range(20):
  150. th = threading.Thread(target=verify,args=()) ;
  151. thread_pool.append(th)
  152. # start threads one by one
  153. for thread in thread_pool:
  154. thread.start()
  155. #collect all threads
  156. for thread in thread_pool:
  157. threading.Thread.join(thread)
  158. #结果按响应时间从小到大排序
  159. result.sort(lambda x,y: cmp(x['time'], y['time']))
  160. fname = 'proxy_'+ time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time())) +'.txt'
  161. file = open(fname,'w')
  162. print "验证结果如下:"
  163. for item in result:
  164. str = '%s:%s   %s,%s,%d' % (item['domain'],item['port'],item['type'],item['state'],item['time'])
  165. print str
  166. file.write(str+'\n')
  167. file.close()
  168. print "所有代理已验证完 毕,共计%d个验证通过。验证通过的代理已存入%s" % (len(result),fname)

转载于:https://www.cnblogs.com/baizx/archive/2011/01/19/1939619.html

Python 代理验证程序(For 无忧代理) 多线程版相关推荐

  1. Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?

    Problem58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc? Ans: 在Linux程序设计当中,如果一个程序被设计成可以支持单线程或多线程的模式,可以当过弱引用的方法来 ...

  2. 透過proxychains讓不支持代理的程序通過代理上網

    2019独角兽企业重金招聘Python工程师标准>>> 一直知道tsocks有這樣的功能,但今天用時確連不上SSH轉發的socks5代理服務器.於是google了一下,發現有同樣功能 ...

  3. python 银行业务系统程序编程写_python多线程实现代码(模拟银行服务操作流程)

    1.模拟银行服务完成程序代码 目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队.排队等待.叫号服务等功能,代替了人们站队的辛苦. 排队叫号 ...

  4. python登录验证程序_Python模拟用户登录验证

    本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下 1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3 ...

  5. python重复运行程序百度知道_Python多线程采集百度相关搜索关键词工具带exe程序!...

    [Python] 纯文本查看 复制代码#百度相关搜索关键词抓取,读取txt关键词,导出txt关键词 # -*- coding=utf-8 -*- import requests import re i ...

  6. python登录验证程序_python – 测试Flask登录和身份验证?

    我正在开发一个Flask应用程序,并使用Flask-security进行用户身份验证(其又使用Flask-login在下面). 我有一个需要身份验证的路由,/ user.我正在尝试编写一个单元测试,测 ...

  7. python内容审核_我们看下Python黄图批量鉴别审核(多线程版)!学习学习

    前言 最近写了一款微信小程序需要用到图片审核,人工审核是不可能的人工审核的太费精力了,所以我就写了一个多线程批量识别脚本来处理,主要是调用百度AI的接口,这里我是付费了也不贵审核一条1分钱不到,再说我 ...

  8. python数据可视化程序_python数据可视化简易版

    最近白天在整机器学习和算法导论,做预判分析的时候发现,经常用到几个画图代码,老是弄混.睡不着,深夜上线整理一波,顺便加强一下记忆叭.写多少是多少,不行就白天接着补.. 今天先整理一波常规画图操作.其实 ...

  9. python画棒棒糖程序_coloradd模块0.25版示例代码棒棒糖_colorset_saturationset_lightset

    coloradd模块主要用来配合海龟画图,能使所画的图形更加漂亮. 本源代码为coloradd模块学习代码,请认真查看saturationset和lightset和coloradd与colorset的 ...

  10. python闹钟界面程序_python闹钟之完美版

    前面的博客写的闹钟知识系统自带的声音,下面给大家讲一种更简单的做法! 代码是死的 人时活的! import webbrowser as web import time import os import ...

最新文章

  1. Linux LVM卷挂载
  2. 电机编码器调零步骤_各种编码器的调零方法
  3. 网站高并发及高并发架构详解
  4. php url无效,PHP解析URL并失去URL中的参数
  5. python中输出菱形_用python打印菱形的实操方法和代码
  6. ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)
  7. iOS不同版本适配问题
  8. Python中lambda表达式的常见用法
  9. 台式计算机视频设备打不开,电脑视频设备被占用未能创建视频预览怎么办
  10. bzoj 4709: [Jsoi2011]柠檬(分段DP+决策单调性)
  11. 自然语言处理︱简述四大类文本分析中的“词向量”(文本词特征提取)
  12. 电子计算机特征具有什么功能,电子计算机的基本特征有哪些?
  13. 桥接路由器总是掉线_桥接后副路由器网速特别慢,而且经常掉线
  14. 面试可能遇到java基础知识
  15. 文本框导入图片并显示到页面上
  16. 浏览器预检请求返回400 has been blocked by CORS policy: Response to preflight request doesn’t pass access cont
  17. mysql 1亿条数据建索引时间_单表 13 亿记录创建索引需要多长时间?
  18. 手机图片压缩大小的方法,用什么软件压缩
  19. Unity发布webgl的一些问题
  20. 产生冠军(HDU1002)谢庆皇

热门文章

  1. 缠中说禅:缠非缠、禅非禅,枯木龙吟照大千(整理版)
  2. 看咪蒙真的有那么low吗?
  3. 中国被动元件市场规模调研与发展趋势预测报告2022版
  4. u盘安全弹出有什么用?数据丢失还能恢复吗
  5. Excel如何将数据上下调换位置
  6. 锐炬显卡和独立显卡有什么不同?
  7. 【LaTeX】对表格中的内容添加脚注不显示
  8. 捏着鼻子也要吃? 吃蔬菜几大误区盘点
  9. 2021-2027全球与中国大数据工程服务市场现状及未来发展趋势
  10. java 文件zip打包下载 多个文件夹分类