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程序设计有所帮助。