python 多线程下载mp4_python 实现多线程下载视频的代码

代码:

def thread(url):

r = requests.get(url, headers=None, stream=True, timeout=30)

# print(r.status_code, r.headers)

headers = {}

all_thread = 1

# 获取视频大小

file_size = int(r.headers['content-length'])

# 如果获取到文件大小,创建一个和需要下载文件一样大小的文件

if file_size:

fp = open('2.mp4', 'wb')

fp.truncate(file_size)

print('视频大小:' + str(int(file_size / 1024 / 1024)) + "MB")

fp.close()

# 每个线程每次下载大小为5M

size = 5242880

# 当前文件大小需大于5M

if file_size > size:

# 获取总线程数

all_thread = int(file_size / size)

# 设最大线程数为10,如总线程数大于10

# 线程数为10

if all_thread > 10:

all_thread = 10

part = file_size // all_thread

threads = []

starttime = datetime.datetime.now().replace(microsecond=0)

for i in range(all_thread):

# 获取每个线程开始时的文件位置

start = part * i

# 获取每个文件结束位置

if i == all_thread - 1:

end = file_size

else:

end = start + part

if i > 0:

start += 1

headers = headers.copy()

headers['Range'] = "bytes=%s-%s" % (start, end)

t = threading.Thread(target=Handler, name='th-' + str(i),

kwargs={'start': start, 'end': end, 'url': url, 'filename': '2.mp4', 'headers': headers})

t.setDaemon(True)

threads.append(t)

# 线程开始

for t in threads:

time.sleep(0.2)

t.start()

# 等待所有线程结束

for t in threads:

t.join()

endtime = datetime.datetime.now().replace(microsecond=0)

print('用时:%s' % (endtime - starttime))

def Handler(start, end, url, filename, headers={}):

tt_name = threading.current_thread().getName()

print(tt_name + ' is begin')

r = requests.get(url, headers=headers, stream=True)

total_size = end - start

downsize = 0

startTime = time.time()

with open(filename, 'r+b') as fp:

fp.seek(start)

var = fp.tell()

for chunk in r.iter_content(204800):

if chunk:

fp.write(chunk)

downsize += len(chunk)

line = tt_name + '-downloading %d KB/s - %.2f MB, 共 %.2f MB'

line = line % (

downsize / 1024 / (time.time() - startTime), downsize / 1024 / 1024,

total_size / 1024 / 1024)

print(line, end='\r')

if __name__ == '__main__':

url = input('输入视频链接(请输入视频原链):')

thread(url)

效果:

d32a6a05dd3711d8fc06b2a7bcf73572.png

可以看见,38MB,一秒下完。

唯一的缺点就是,要有视频原链,而一般这个视频原链都是不会轻易被找到的,这就叫反爬。

找视频原链,就找爬虫,视频爬虫只是爬虫的一种。

可以根据视频大小,改变线程数。

总结

以上所述是小编给大家介绍的python 实现多线程下载视频的代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对聚米学院网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值