Python3实现并发检验代理池地址的方法
本文实例讲述了Python3实现并发检验代理池地址的方法。分享给大家供大家参考,具体如下:
#encoding=utf-8
#author:walker
#date:2016-04-14
#summary:用协程/线程池并发检验代理有效性
importos,sys,time
importrequests
fromconcurrentimportfutures
cur_dir_fullpath=os.path.dirname(os.path.abspath(__file__))
Headers={
'Accept':'*/*',
'User-Agent':'Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.1;WOW64;Trident/4.0;SLCC2;.NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;.NET4.0C;.NET4.0E)',
}
#检验单个代理的有效性
#如果有效,返回该proxy;否则,返回空字符串
defCheck(desturl,proxy,feature):
proxies={'http':'http://'+proxy}
r=None#声明
exMsg=None
try:
r=requests.get(url=desturl,headers=Headers,proxies=proxies,timeout=3)
except:
exMsg='*'+traceback.format_exc()
#print(exMsg)
finally:
if'r'inlocals()andr:
r.close()
ifexMsg:
return''
ifr.status_code!=200:
return''
ifr.text.find(feature)<0:
return''
returnproxy
#输入代理列表(set/list),返回有效代理列表
defGetValidProxyPool(rawProxyPool,desturl,feature):
validProxyList=list()#有效代理列表
pool=futures.ThreadPoolExecutor(8)
futureList=list()
forproxyinrawProxyPool:
futureList.append(pool.submit(Check,desturl,proxy,feature))
print('\nsubmitdone,waitingforresponses\n')
forfutureinfutures.as_completed(futureList):
proxy=future.result()
print('proxy:'+proxy)
ifproxy:#有效代理
validProxyList.append(proxy)
print('validProxyListsize:'+str(len(validProxyList)))
returnvalidProxyList
#获取原始代理池
defGetRawProxyPool():
rawProxyPool=set()
#通过某种方式获取原始代理池......
returnrawProxyPool
if__name__=="__main__":
rawProxyPool=GetRawProxyPool()
desturl='http://...'#需要通过代理访问的目标地址
feature='xxx'#目标网页的特征码
validProxyPool=GetValidProxyPool(rawProxyPool,desturl,feature)
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python入门与进阶经典教程》、《PythonURL操作技巧总结》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《PythonSocket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。