吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1705|回复: 3
收起左侧

[Python 转载] 学习+修改别人,一段简单的多线程下载视频代码

[复制链接]
chaiasd 发表于 2020-8-27 15:27
import requests
import threading
import time


head = {
#对于有反爬措施的网站,可以根据实际情况添加
}


def thread(url,filename):
    thread_list = []
    f = requests.get(url,headers = head)#此处请求头可以根据实际情况添加,如不添加请将header = head注释掉
    file_size = int(f.headers['Content-Length'])
    path = str(filename)
    if file_size:
        fp = open(path, 'wb')
        fp.truncate(file_size)
        print('视频大小:' + str(int(file_size / 1024 / 1024)) + "MB")
        fp.close()
    #获取视频文件大小
    size = 10485760
    all_thread = 1
    if file_size > size:
        all_thread = (file_size//size) + 1
        if all_thread > 10:
            all_thread = 10
    #将视频按每10M为一份,分成若干线程,最多10个线程
    starttime = time.time()
    for i in range(all_thread):
        # 获取每个线程开始时的文件位置
        start = size * i
        # 获取每个文件结束位置
        if i > 0:#文件指针后移一位
            start += 1
        t = threading.Thread(target=download_master, name='th-' + str(i),
                             kwargs={'start': start, 'url': url, 'filename': path})
        t.setDaemon(True)
        thread_list.append(t)
    for t in thread_list:
        time.sleep(0.2)
        t.start()
        # 等待所有线程结束
    for t in thread_list:
        t.join()
    endtime = time.time()
    t_time(endtime,starttime)

def t_time(end,start):
    c = int(end - start)
    if c > 60:
        print("总用时{}{}".format(c//60,c%60))
    else:
        print("总用时0%d"%c)

def download_master(start,url,filename):
    th_name = threading.current_thread().getName()
    print(th_name,'is begin...')
    r = requests.get(url, headers=head, stream=True)
    downsize = 0
    with open(filename, 'r+b') as fp:
        fp.seek(start)
        var = fp.tell()
        for chunk in r.iter_content(204800):
            '''   
            流下载requests.get(url)默认是下载在内存中的,
            下载完成才存到硬盘上,可以用Response.iter_content 来边下载边存硬盘
            '''
            if chunk:
                fp.write(chunk)
                downsize += len(chunk)


if __name__ =='__main__':
    url = input('输入视频地址:')
    #必须是视频源地址
    path = input('输入视频保存地址及名称')
    #示例:d:/test/test.mp4
    thread(url,path)










免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

heelihua 发表于 2020-8-27 15:56
这太高端了,怎么玩的,PY几里面
 楼主| chaiasd 发表于 2020-8-27 16:46
anlovedong 发表于 2020-8-28 13:22
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 03:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表