写了一个哔哩哔哩的视频下载代码,知识储备不够, 有能力的给润色一把

写了一个哔哩哔哩的视频下载代码,知识储备不够, 有能力的给润色一把

import requests
from contextlib import closing

def downlaod(url):
    '''核心下载代码'''
    with requests.Session() as s:
        headers = {
    'Accept':'*/*',
    'Accept-Encoding':'gzip, deflate, br',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Connection':'keep-alive',
    'Host':'cn-hbsjz2-cmcc-acache-04.acgvideo.com',
    'If-Range':'Mon, 07 Jan 2019 03:35:04 GMT',
    'Origin':'https://www.bilibili.com',
    'Range':'bytes=0-974',
    'Referer':'https://www.bilibili.com/video/av40081185/',  # 跳转页面,可以修改
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
        s.headers = headers
        with closing(s.get(url,stream=True)) as response:  # 为了获得视频的总大小
            content_size = int(response.headers['Content-Range'].split('/')[-1])  # 视频的总大小
            count = content_size // 5000  # 把总大小分成多少块
            chunk_size = 5000    # 把块大小设定为5000
            total = 0
            a = 0
            with open('./file.mp4', "ab+") as file:
                for i in range(count):
                    total += chunk_size
                    if total < content_size:   # 满足每块5000字节时下载
                        data = s.get(url,headers={'Range':'bytes=%s-%s'%(a,total)})  # 构造请求头
                        file.write(data.content)
                    else:  # 块大小小于5000时调用
                        data = s.get(url,headers={'Range':'bytes=%s-%s'%(a,content_size-chunk_size*count)})
                        file.write(data.content)
                    a = (i + 1) * chunk_size + 1

现在的问题时下载速度特别慢,是不是要做多线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值