zoukankan      html  css  js  c++  java
  • request下载进度显示,多线程爬取麦子学院视频

    #encoding:utf8
    import _thread
    import time
    import requests
    from lxml import etree
    import re
    import sys
    from contextlib import closing
    # 为线程定义一个函数
    class ProgressBar(object):

    def __init__(self, title,
    count=0.0,
    run_status=None,
    fin_status=None,
    total=100.0,
    unit='', sep='/',
    chunk_size=1.0):
    super(ProgressBar, self).__init__()
    self.info = "【%s】%s %.2f %s %s %.2f %s"
    self.title = title
    self.total = total
    self.count = count
    self.chunk_size = chunk_size
    self.status = run_status or ""
    self.fin_status = fin_status or " " * len(self.status)
    self.unit = unit
    self.seq = sep

    def __get_info(self):
    # 【名称】状态 进度 单位 分割线 总数 单位
    _info = self.info % (self.title, self.status,
    self.count/self.chunk_size, self.unit, self.seq, self.total/self.chunk_size, self.unit)
    return _info

    def refresh(self, count=1, status=None):
    self.count += count
    # if status is not None:
    self.status = status or self.status
    end_str = "\r"
    if self.count >= self.total:
    end_str = '\n'
    self.status = status or self.fin_status

    print(self.__get_info())
    print(end=end_str)
    #以上是进度条设置

    def print_time(threadName='Thread-1', delay='http://newoss.maiziedu.com/qiniu/1shuozaiqianmiandehua.mp4'):
    da = {'Referer': 'http://m.maiziedu.com/course/393-4373/',
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'}
    with closing(requests.get(delay, stream=True,headers=da)) as response:
    chunk_size = 1024 # 单次请求最大值
    content_size = int(response.headers['content-length']) # 内容体总大小
    progress = ProgressBar(threadName, total=content_size,
    unit="KB", chunk_size=chunk_size, run_status="正在下载", fin_status="下载完成")
    with open('F:\\10\\bsbs\\mai\\'+threadName+'.mp4', "wb") as file:
    for data in response.iter_content(chunk_size=chunk_size):
    file.write(data)

    progress.refresh(count=len(data))

    print(threadName+'开始')

    # yuan = requests.get(delay, headers=da).content
    # op = open('F:\\10\\bsbs\\mai\\'+threadName+'.mp4', 'wb')
    # op.write(yuan)
    # op.close()


    # 创建两个线程
    # print_time()
    try:
    _thread.start_new_thread(print_time, ("Thread-1",'http://newoss.maiziedu.com/qiniu/1shuozaiqianmiandehua.mp4'))
    _thread.start_new_thread(print_time, ("Thread-2",'http://newoss.maiziedu.com/qiniu/8lei.mp4'))
    except:
    print("Error: unable to start thread")


    while 1:
    pass

    print("Main Finished")
  • 相关阅读:
    Feed back TFS 2017 RC upgrade status to product team in product group 2017.03.01
    TFS Training for Kunlun bank (http://www.klb.cn/) 微软研发流程(ALM)管理培训会议(昆仑银行) 2016.09.21
    微软DevOps软件开发高级培训课程(深圳站) 2016.04.06
    秒杀系统架构设计
    程序员职业规划
    程序员跳槽时,会遇到哪些套路?
    程序员3大点
    程序员37个小贴士
    程序员6大点
    程序员面试 10 大潜规则
  • 原文地址:https://www.cnblogs.com/lianghongrui/p/6857106.html
Copyright © 2011-2022 走看看