Python 代理验证程序(For 无忧代理) 多线程版
转发-来自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 |
- # coding:gbk
- # 验证最新可用代 理 For http://www.5uproxy.net 多线程版
- # by redice 2010.12.09
- import sys
- reload(sys)
- sys.setdefaultencoding('gbk')
- import urllib
- import urllib2
- from urllib2 import URLError, HTTPError
- DEBUG = True
- #html页面下载函数
- def getHtml(url,post_data=None,cookie=None):
- """Fetch the target html
- url - URL to fetch
- post_data - POST Entity
- cookie - Cookie Header
- """
- if DEBUG:
- print "getHtml: ",url
- result =''
- try:
- #create a request
- request = urllib2.Request(url)
- #change User-Agent
- request.add_header('User-Agent','Mozilla/5.0')
- #change Referrer
- request.add_header('Referrer',url)
- #if has cookie,add cookie header
- if cookie:
- request.add_header('Cookie',cookie)
- #create a opener
- opener = urllib2.build_opener()
- #if has post entity
- if post_data:
- #encode post data
- post_data = urllib.urlencode(post_data)
- response = opener.open(request,post_data)
- else:
- response = opener.open(request)
- result = response.read()
- response.close()
- #no content,don't save
- if not result or len(result)==0:
- return ''
- return result
- except HTTPError, e:
- if DEBUG:
- print 'Error retrieving data:',e
- print 'Server error document follows:\n'
- #print e.read()
- return ''
- except URLError, e:
- if hasattr(e, 'reason'):
- if DEBUG:
- print 'Failed to reach a server.'
- print 'Reason: ', e.reason
- return ''
- elif hasattr(e, 'code'):
- if DEBUG:
- print 'The server couldn\'t fulfill the request.'
- print 'Error code: ', e.code
- return ''
- except Exception, e:
- if DEBUG:
- print e
- return ''
- #需要验证的代理列表
- proxy_urls = []
- proxy_urls.append({'url':'http://www.5uproxy.net/http_fast.html','type':'http_fast'})
- proxy_urls.append({'url':'http://www.5uproxy.net/http_anonymous.html','type':'http_anonymous'})
- proxy_urls.append({'url':'http://www.5uproxy.net/http_non_anonymous.html','type':'http_transparent'})
- proxy_urls.append({'url':'http://www.5uproxy.net/socks5.html','type':'socks5'})
- import re
- import socket
- import time
- import threading
- result =[]
- #线程同步锁
- lock = threading.Lock()
- def synchronous(f):
- def call(*args, **kwargs):
- lock.acquire()
- try:
- return f(*args, **kwargs)
- finally:
- lock.release()
- return call
- # 先获取所有待验证的代理
- proxies = []
- for proxy_url in proxy_urls:
- html = getHtml(proxy_url['url'])
- #正则匹配获取每一代理
- 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)
- for r in rs:
- proxy = {}
- #代理域名
- proxy['domain'] = r[0]
- #代理端口
- proxy['port'] = r[1]
- #代理国家
- proxy['state'] = r[2]
- #代理类型
- proxy['type'] = proxy_url['type']
- #响应时间
- proxy['time'] = 0
- if not (proxy in proxies):
- proxies.append(proxy)
- # 获取一个待验证代理
- @synchronous
- def getproxy():
- global proxies
- if len(proxies)>0:
- return proxies.pop()
- else:
- return ''
- #保存验证结果
- @synchronous
- def saveresult(proxy):
- global result
- if not(proxy in result):
- result.append(proxy)
- #线程函数
- def verify():
- while 1:
- proxy = getproxy()
- #所有代理均已验证完毕
- if len(proxy)==0:
- return
- print "正在验证:%s,%s" % (proxy['domain'],proxy['port'])
- #验证代理的可用性
- #创建一个TCP连接套接字
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- #设置10超时
- sock.settimeout(10)
- try:
- start = time.clock()
- #连接代理服务器
- sock.connect((proxy['domain'], int(proxy['port'])))
- proxy['time'] = int((time.clock() - start) * 1000)
- sock.close()
- saveresult(proxy)
- print "%s,%s 验证通过,响应时间:%d ms." % (proxy['domain'],proxy['port'],proxy['time'])
- except Exception, e:
- if DEBUG:
- print e
- print "%s,%s 验 证失败." % (proxy['domain'],proxy['port'])
- #init thread_pool
- thread_pool = []
- for i in range(20):
- th = threading.Thread(target=verify,args=()) ;
- thread_pool.append(th)
- # start threads one by one
- for thread in thread_pool:
- thread.start()
- #collect all threads
- for thread in thread_pool:
- threading.Thread.join(thread)
- #结果按响应时间从小到大排序
- result.sort(lambda x,y: cmp(x['time'], y['time']))
- fname = 'proxy_'+ time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time())) +'.txt'
- file = open(fname,'w')
- print "验证结果如下:"
- for item in result:
- str = '%s:%s %s,%s,%d' % (item['domain'],item['port'],item['type'],item['state'],item['time'])
- print str
- file.write(str+'\n')
- file.close()
- print "所有代理已验证完 毕,共计%d个验证通过。验证通过的代理已存入%s" % (len(result),fname)
转载于:https://www.cnblogs.com/baizx/archive/2011/01/19/1939619.html
Python 代理验证程序(For 无忧代理) 多线程版相关推荐
- Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?
Problem58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc? Ans: 在Linux程序设计当中,如果一个程序被设计成可以支持单线程或多线程的模式,可以当过弱引用的方法来 ...
- 透過proxychains讓不支持代理的程序通過代理上網
2019独角兽企业重金招聘Python工程师标准>>> 一直知道tsocks有這樣的功能,但今天用時確連不上SSH轉發的socks5代理服務器.於是google了一下,發現有同樣功能 ...
- python 银行业务系统程序编程写_python多线程实现代码(模拟银行服务操作流程)
1.模拟银行服务完成程序代码 目前,在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统,该系统完全模拟了人群排队全过程,通过取票进队.排队等待.叫号服务等功能,代替了人们站队的辛苦. 排队叫号 ...
- python登录验证程序_Python模拟用户登录验证
本文实例为大家分享了Python模拟用户登录验证的具体代码,供大家参考,具体内容如下 1.功能简介 此程序模拟用户登录验证的过程,实现用户名输入.黑名单检测.用户有效性判别.密码输入及验证等.用户在3 ...
- python重复运行程序百度知道_Python多线程采集百度相关搜索关键词工具带exe程序!...
[Python] 纯文本查看 复制代码#百度相关搜索关键词抓取,读取txt关键词,导出txt关键词 # -*- coding=utf-8 -*- import requests import re i ...
- python登录验证程序_python – 测试Flask登录和身份验证?
我正在开发一个Flask应用程序,并使用Flask-security进行用户身份验证(其又使用Flask-login在下面). 我有一个需要身份验证的路由,/ user.我正在尝试编写一个单元测试,测 ...
- python内容审核_我们看下Python黄图批量鉴别审核(多线程版)!学习学习
前言 最近写了一款微信小程序需要用到图片审核,人工审核是不可能的人工审核的太费精力了,所以我就写了一个多线程批量识别脚本来处理,主要是调用百度AI的接口,这里我是付费了也不贵审核一条1分钱不到,再说我 ...
- python数据可视化程序_python数据可视化简易版
最近白天在整机器学习和算法导论,做预判分析的时候发现,经常用到几个画图代码,老是弄混.睡不着,深夜上线整理一波,顺便加强一下记忆叭.写多少是多少,不行就白天接着补.. 今天先整理一波常规画图操作.其实 ...
- python画棒棒糖程序_coloradd模块0.25版示例代码棒棒糖_colorset_saturationset_lightset
coloradd模块主要用来配合海龟画图,能使所画的图形更加漂亮. 本源代码为coloradd模块学习代码,请认真查看saturationset和lightset和coloradd与colorset的 ...
- python闹钟界面程序_python闹钟之完美版
前面的博客写的闹钟知识系统自带的声音,下面给大家讲一种更简单的做法! 代码是死的 人时活的! import webbrowser as web import time import os import ...
最新文章
- Linux LVM卷挂载
- 电机编码器调零步骤_各种编码器的调零方法
- 网站高并发及高并发架构详解
- php url无效,PHP解析URL并失去URL中的参数
- python中输出菱形_用python打印菱形的实操方法和代码
- ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(2)
- iOS不同版本适配问题
- Python中lambda表达式的常见用法
- 台式计算机视频设备打不开,电脑视频设备被占用未能创建视频预览怎么办
- bzoj 4709: [Jsoi2011]柠檬(分段DP+决策单调性)
- 自然语言处理︱简述四大类文本分析中的“词向量”(文本词特征提取)
- 电子计算机特征具有什么功能,电子计算机的基本特征有哪些?
- 桥接路由器总是掉线_桥接后副路由器网速特别慢,而且经常掉线
- 面试可能遇到java基础知识
- 文本框导入图片并显示到页面上
- 浏览器预检请求返回400 has been blocked by CORS policy: Response to preflight request doesn’t pass access cont
- mysql 1亿条数据建索引时间_单表 13 亿记录创建索引需要多长时间?
- 手机图片压缩大小的方法,用什么软件压缩
- Unity发布webgl的一些问题
- 产生冠军(HDU1002)谢庆皇