关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
通过上篇文章 JS逆向|获取某电影解析网站的真实视频地址,获取到了视频的真实播放地址:
/?filename=1.mp4
现在使用Python写一个脚本,将其下载下来。
一般来说,一个文件下载的网址是静态的,不存在反爬(需要鉴权的除外),因此不需要去格外研究反爬。
思路:
使用requests库来进行下载
通过设置headers['range'] 字段来告诉程序从哪里开始下载,即断点续传
下载块 除以 文件总大小 即为 下载百分百
下载块 除以 时间差值 即为 当前网速
通过一番摸索和调试,写出了下面的代码:
# coding: utf-8
import re
import requests
from pathlib import Path
from time import time, perf_counter
from fake_useragent import UserAgentdef download_file_from_url(dl_url, file_name, headers):file_path = Path(__file__).parent.joinpath(file_name)if ists():dl_size = file_path.stat().st_sizeelse:dl_size = 0headers['range'] = f'bytes={dl_size}-'response = (dl_url, stream=True, headers=headers)print('nn' + '*' * 30 + '下载信息' + '*' * 30)total_size = int(response.headers['content-length'])print(f'nn文件名称:{file_name}tt已下载文件大小:{dl_size / 1024 / 1024:.2f}Mtt文件总大小:{total_size/1024/1024:.2f}Mnn')start = perf_counter()data_count = 0count_tmp = 0start_time = time()with open(file_path, 'ab') as fp:for chunk in response.iter_content(chunk_size=512):data_count += len(chunk)now_pross = (data_count / total_size) * 100mid_time = time()if mid_time - start_time > 0.1:speed = (data_count - count_tmp) / 1024 / (mid_time - start_time)start_time = mid_timecount_tmp = data_countprint(f".{now_pross:.2f}%t{data_count//1024}Kb/{total_size//1024}Kbt当前下载速度:{speed:.2f}Kb/s", end='')fp.write(chunk)end = perf_counter()diff = end - startspeed = total_size/1024/diffprint(f'nn下载完成!耗时:{diff:.2f}秒, 平均下载速度:{speed:.2f}Kb/s!n文件路径:{file_path}n')if __name__ == '__main__':url = '/?filename=1.mp4'#filename = url.rpartition('/')[-1]filename = "复仇者联盟4.mp4"headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36', }download_file_from_url(url, filename, headers)
初始下载:
暂停后再下载:
这里有个小问题,下载进度没有将已经下载好的没有计算在内。后面再研究了。
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
本文发布于:2024-01-30 13:47:45,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170659366920433.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |