本文实例讲述了Python多线程下载文件的方法。分享给大家供大家参考。具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
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 ;
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程序设计有所帮助。