python下载,由于前面多线程+网络波动下载失败的文件,建议多刷几次【三】
import requests from fake_useragent import UserAgent import re from queue import Queue import threading import datetime class xiazai(): def __init__(self,dizhi): self.dizhi = dizhi t = UserAgent(use_cache_server=False, verify_ssl=False).random self.headers={ 'User-Agent':t } def down(self): global ts_queue with open(self.dizhi,'r') as f : url = f.read() url = url.split('\n') ts_queue = Queue(10000) for i in range(len(url)): ts_queue.put(url[i]) return ts_queue class xiazai1(): def __init__(self,wenjian): self.wenjian = wenjian t = UserAgent(use_cache_server=False, verify_ssl=False).random self.headers = { 'User-Agent': t } def xiazai(self,ts_queue): while not ts_queue.empty(): url = ts_queue.get() try: r = requests.get(url, stream=True, headers=self.headers) filename = re.search('([a-zA-Z0-9-]+.ts)', url).group(1).strip() with open(self.wenjian + '/' + filename, 'wb') as fp: fp.write(r.content) except: with open(self.wenjian + '/' + 'shibai1.txt', 'w') as fp: fp.write(url + '\n') fp.close() print(url + '下载失败') if __name__ =='__main__': dizhi = input('请输入文件地址加保存名?') wenjian = input('请输入文件保存地址:') #xiazai(dizhi,wenjian) start = datetime.datetime.now().replace(microsecond=0) s = xiazai(dizhi).down() threads = [] for i in range(15): t = threading.Thread(target=xiazai1(wenjian).xiazai, name='th-' + str(i), kwargs={'ts_queue': s}) threads.append(t) for t in threads: t.start() for t in threads: t.join() end = datetime.datetime.now().replace(microsecond=0) print('下载耗时:' + str(end - start))
如果人生还有重来,那就不叫人生。

浙公网安备 33010602011771号