Python threading多线程断点下载文件的方法,pythonthreading,这是编橙之家一篇关于Py


这是编橙之家一篇关于Python多线程下载文件方法的代码实例。文中应用到的python模块和方法有httplib、Python urllib2、Python threading多线程模块、python queue、sleep,这些方法或是模块的具体实现流程可以参考本站的相关文章介绍。这是作者用了一小时左右写出来的python抓取文件的代码,喜欢的朋友可以拿去改进下。例如断点续传文件、多线程队列下载文件,这样的功能也是很受欢迎的,只是代码不太好写,需要一定的知识面和思路。

代码中没有太多的注释,感觉大家知道这些python方法的话应该都明白我的思路。

python 多线程下载文件
(以上多线程演示图片仅供参考!)

Python多线程下载文件的方法参考如下代码段:

import httplibimport urllib2import timefrom threading import Threadfrom Queue import Queuefrom time import sleep#以上为需要用到的模块和方法proxy = 'your proxy';opener = urllib2.build_opener( urllib2.ProxyHandler({'http':proxy}) )urllib2.install_opener( opener )ids = {};for i in range(1,110):try:listUrl = "http://www.someweb.net/sort/list_8_%d.shtml" % (i);print listUrl;page = urllib2.urlopen(listUrl).read();speUrl = "http://www.someweb.net/soft/";speUrlLen = len(speUrl);idx = page.find(speUrl,0);while idx!=-1:dotIdx = page.find(".",idx + speUrlLen);if dotIdx != -1:id = page[idx + speUrlLen:dotIdx];ids[id] = 1;idx = page.find("http://www.someweb.net/soft/",idx + speUrlLen);except:pass;#www.iplaypy.comq = Queue()NUM = 5failedId = [];def do_somthing_using(id):try:url = "http://www.someweb.net/download.php?softid=%s&type=dx" % (id);h2 = httplib.HTTPConnection("your proxy", "you port");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();print savePath + " saved";except:pass;def working():    while True:        arguments = q.get()        do_somthing_using(arguments)        sleep(1)        q.task_done()for i in range(NUM):    t = Thread(target=working)    t.setDaemon(True)    t.start()for id in ids:    q.put(id)q.join()

感觉这个Python多线程下载文件的方法的方法还能再精简一点,如果有哪位python大牛可以指教一二非常感谢。

编橙之家文章,

评论关闭