写了一个哔哩哔哩的视频下载代码,知识储备不够, 有能力的给润色一把
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
total = 0
a = 0
with open('./file.mp4', "ab+") as file:
for i in range(count):
total += chunk_size
if total < content_size:
data = s.get(url,headers={'Range':'bytes=%s-%s'%(a,total)})
file.write(data.content)
else:
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
现在的问题时下载速度特别慢,是不是要做多线程