#!/usr/bin/env python# -*- coding:utf-8 -*-from gevent import monkeymonkey.patch_all()from gevent.pool import poolimport requestsimport sysimport osdef download(url): chrome = 'mozilla/5.0 (x11; linux i86_64) applewebkit/537.36 ' + '(khtml, like gecko) chrome/41.0.2272.101 safari/537.36' headers = {'user-agent': chrome} filename = url.split('/')[-1].strip() r = requests.get(url.strip(), headers=headers, stream=true) with open(filename, 'wb') as f: for chunk in r.iter_content(chunk_size=1024): if chunk:f.write(chunk)f.flush() print filename,is okdef removeline(key, filename): os.system('sed -i /%s/d %s' % (key, filename))if __name__ ==__main__: if len(sys.argv) == 2: filename = sys.argv[1] f = open(filename,r) p = pool(4) for line in f.readlines(): if line: p.spawn(download, line.strip()) key = line.split('/')[-1].strip() removeline(key, filename)f.close()p.join()else: print 'usage: python %s urls.txt' % sys.argv[0]
其他网友的方法:
from os.path import basenamefrom urlparse import urlsplitdef url2name(url): return basename(urlsplit(url)[2])def download(url, localfilename = none): localname = url2name(url) req = urllib2.request(url) r = urllib2.urlopen(req) if r.info().has_key('content-disposition'): # if the response has content-disposition, we take file name from it localname = r.info()['content-disposition'].split('filename=')[1] if localname[0] == '' or localname[0] == ': localname = localname[1:-1] elif r.url != url: # if we were redirected, the real file name we take from the final url localname = url2name(r.url) if localfilename: # we can force to save the file as specified name localname = localfilename f = open(localname, 'wb') f.write(r.read()) f.close()download(r'你要下载的python文件的url地址')
以上便是本文给大家分享的全部内容了,小伙伴们可以测试下哪种方法效率更高呢。
