玩蛇网提供最新Python编程技术信息以及Python资源下载!
您现在的位置: 玩蛇网首页 > Python源码实例_Python程序源代码_网站项目下载 > 正文内容

Python threading多线程断点下载文件的方法

Python入门佳作 经典教程的全新修订 10个项目引人入胜
玩蛇网推荐图文教程:python黑客多线程扫描器

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

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

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

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

import httplib
import urllib2
import time
from threading import Thread
from Queue import Queue
from 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.iplaypython.com

q = Queue()
NUM = 5
failedId = [];

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大牛可以指教一二非常感谢。

玩蛇网文章,转载请注明出处和来源网址:http://www.iplaypython.com/code/c2698.html



微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!

微信扫描下图可直接关注

玩蛇网PythonQQ群,欢迎加入: ① 240764603 玩蛇网Python新手群
出炉日期:2016-01-31 21:11 玩蛇网 www.iplaypython.com

我要分享到:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules