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

 

posted @ 2020-12-08 16:16  凹凸曼大人  阅读(268)  评论(0)    收藏  举报