1. 程式人生 > 實用技巧 >python下載,由於前面多執行緒+網路波動下載失敗的檔案,建議多刷幾次【三】

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))