• 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")
  • 相关阅读:
    Java总结IO篇之字符流
    基于Socket的网络数据传输测试(Java+Android+腾讯云)
    4-AI--Activity跳转动画
    06--图解数据结构之递归小例子
    Java容器源码攻坚战--第三战:HashMap(一)
    Java容器源码攻坚战--第二战:ArrayList
    charles mock方法及问题
    两道SQL题目
    python3中的编解码
    Jmeter之逻辑控制器(Logic Controller)
  • 原文地址:https://www.cnblogs.com/lianghongrui/p/6857106.html
Copyright © 2020-2023  润新知