Python多线程下载文件的方法
本文实例讲述了Python多线程下载文件的方法。分享给大家供大家参考。具体实现方法如下:
importhttplib importurllib2 importtime fromthreadingimportThread fromQueueimportQueue fromtimeimportsleep proxy='yourproxy'; opener=urllib2.build_opener(urllib2.ProxyHandler({'http':proxy})) urllib2.install_opener(opener) ids={}; foriinrange(1,110): try: listUrl="http://www.someweb.net/sort/list_8_%d.shtml"%(i); printlistUrl; page=urllib2.urlopen(listUrl).read(); speUrl="http://www.someweb.net/soft/"; speUrlLen=len(speUrl); idx=page.find(speUrl,0); whileidx!=-1: dotIdx=page.find(".",idx+speUrlLen); ifdotIdx!=-1: id=page[idx+speUrlLen:dotIdx]; ids[id]=1; idx=page.find("http://www.someweb.net/soft/",idx+speUrlLen); except: pass; q=Queue() NUM=5 failedId=[]; defdo_somthing_using(id): try: url="http://www.someweb.net/download.php?softid=%s&type=dx"%(id); h2=httplib.HTTPConnection("yourproxy","youport"); h2.request("HEAD",url); resp=h2.getresponse(); header=resp.getheaders(); location=header[3][1]; sContent=urllib2.urlopen(location).read(); savePath="C:\\someweb\\%s.rar"%(id); file=open(savePath,'wb'); file.write(sContent); file.close(); printsavePath+"saved"; except: pass; defworking(): whileTrue: arguments=q.get() do_somthing_using(arguments) sleep(1) q.task_done() foriinrange(NUM): t=Thread(target=working) t.setDaemon(True) t.start() foridinids: q.put(id) q.join()
希望本文所述对大家的Python程序设计有所帮助。