您现在的位置是:亿华云 > 人工智能
用Python打造批量下载视频并能可视化下载进度的炫酷下载器
亿华云2025-10-03 20:18:47【人工智能】7人已围观
简介大家好,我是Python进阶者,今天给大家整点好玩的,一起来看看吧~【一、项目背景】平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上,这个时候那些好看的电视剧和电影自
大家好,打的炫我是造批载视载器Python进阶者,今天给大家整点好玩的量下,一起来看看吧~
【一、频并项目背景】
平时宅在家的视化我们最爱做的事莫过于追剧了,但是下载有时候了,网络原因,进度可能会让你无网可上,酷下这个时候那些好看的打的炫电视剧和电影自然是无法观看了,本期我们要讲的造批载视载器就是怎样下载这些视频。
【二、量下项目目标】
通过Python程序对所感兴趣的频并视频进行批量下载,正好小编近期看到一些不错的视化视频,因为想往安卓方向走,下载但又苦于重新学习太复杂,进度有没有简单点的,之前好像有什么e4a但是要学易语言就放弃了,于是乎在茫茫网络发现了一个小众的源码下载编程语言---裕语言。好家伙,不说了,赶紧下载,盘它。
【三、项目实施】
采用sublime text 3 编写程序,先看看效果:
C:\Users\Administrator\Desktop\232.jpg
接下来,由小编我为大家展现程序的具体实现步骤。
【四、实现步骤】
1.分析网页结构
老样子,审查元素定位,如下图:
C:\Users\Administrator\Desktop\1212.jpg
发现视频全都在a标签里面,因为这个页面的视频比较多,所以我们继续分析页面,发现一个神奇的事情。哈哈,原来所有的视频都在class为videoDown的a标签里,有了这个重要的信息就什么都好办了。
#解析页面 def parser(): ab=[] rep=requests.get(http://v.u00.cn:93/iappce.htm#sp,timeout=5,headers=headers) rep.encoding=utf-8 soup=BeautifulSoup(rep.text,html.parser) res=soup.find_all(a,class_=videoDown)#寻找所有class为videoDown的a标签 for y in res: ab.append(http://v.u00.cn:93+y.attrs[href]) #将获取到的视频URL地址添加到列表中 return ab #返回所有视频地址的列表这样就轻轻松松拿到了页面所有的视频地址,怎么样,是不是源码库超级简单了。
2.下载文件
因为我们讲的是批量下载,所以在此之前需要先了解单个下载,当然,单个下载是很耗费时间,而且系统资源利用率太低。
我们来看看这个下载函数如何实现:
#下载函数 def down(y,x): print(------下载第,str(x),课-------) ss=str(y.split(.)[3:4]) \#截取文件名 sa=ss.replace([,).replace(],)\#替换文件名中的特殊符号 ree=requests.get(y) with open(%d.%s.mp4%(x,sa),wb) as f: f.write(ree.content) \#保存文件无非就是一些常用的字符串分隔以及文件操作罢了,不过此种因为比较单一,下载多个文件就行不通了,所以一般只要不是大批量下载,这种方法就够了。
然后在给他套一个函数用来简化他的启动之路。
def main(): for y in range(len(parser())): down(parser()[y],y) \#下载 main()最后调用主函数main,轻轻松松完成单个文件下载。
3.获取文件大小并给下载文件添加缓冲
在下载视频的时候如果我们一下子把所有的资源你都拿出来放进CPU读取,那么很快就会崩溃,所以我们需要设置一个缓冲,等他缓冲区满了然后拿出来读取,听起来好像挺抽象,让我们一起来看一下吧。
C:\Users\Administrator\Desktop\4343.jpg
图中所示即为视频大小值和请求范围的值。
1.获取视频大小
def download(url, file_name): \#下载视频 urllib3.disable_warnings() rep=requests.get(url,headers=headers) head=rep.headers rep=requests.get(url,headers=headers) head=rep.headers \#获取请求头字典 length=head.get(Content-Length) \#获取到视频的亿华云计算大小,单位是字节 若想让他以MB为单位,则需除以两个1024 file_size = int(length) \#视频大小用int转换 if os.path.exists(file_name): \#判断文件名是否存在 first_byte = os.path.getsize(file_name) \#获取文件名大小 else: first_byte = 0 if first_byte \>= file_size: return file_size \#返回文件大小 header = { "Range": "bytes=%s-%s" % (first_byte, file_size), user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 } \#设置请求头,标明请求范围2.配置进度条
pbar = tqdm( \#配置进度条模块,设置文件大小,文件字节数,文件的进度 total=file_size, initial=first_byte, unit=B, unit_scale=True, desc=url.split(/)[-1]) #关于tqdm 具体用法大家可以百度tqdm模块。3.添加缓冲
with closing(requests.get(url, headers=header, stream=True)) as req: #关闭连接 with open(file_name,wb) as f: \#打开文件 for chunk in req.iter_content(chunk_size=1024\*2): \#设置缓冲 if chunk: pbar.set_description("【正在下载视频 %s】"%str(f.name)) f.write(chunk) \#写入文件 pbar.update(1024) \#更新当前进度条 pbar.close() \#关闭进度条 return file_size \#返回文件大小4.构建下载视频并显示进度条函数
def fd(): \#下载并显示进度条 global x x=1 for y in parser(): print(----正在下载,x,课-----) ss=str(y.split(.)[3:4]) sa=ss.replace([,).replace(],) \#文件名 download(y, "{ }.{ }.mp4".format(str(x),sa)) \#下载 print(----完成下载,x,课-----) x+=15.启动程序
Fd()【五.总结】
批量下载视频文件是一个不可多得的技术,程序写的并不够好,比如程序没有添加多线程,多进程,协程,也没有异步操作,可能是因为自己比较懒吧,哈哈哈。
不过也挺简单,多线程就是threading.Thread 顺便加锁 Lock,也可以用多进程multiprocessing中的Process或者进程池Pool,或者协程genvent,或者异步asynic
很赞哦!(6)
相关文章
- 数据架构中的数据问题
- 为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
- 最后提醒我们,域名到期后要及时更新域名,否则可能会丢掉域名,每次抢先注册都不会成功。
- 全球首张!超聚变服务器获TÜV莱茵防泄漏认证证书
- 在更换域名后,并不是就万事大吉了,我们需要将旧域名做301重定向到新域名上,转移旧域名的权重到新域名上。
- CNAME:对应解析的记录值为域名地址
- (4) 使用何种形式的域名后缀对网页搜索影响不大,但域名后缀也需要考虑方便用户记忆
- 新华三李立:攻关算网新技术,推动算力均衡发展
- cm域名有什么独特之处?新人要了解cm域名哪些?
热门文章
- NGINX内存池的设计
- 域名资源有限,好域名更是有限,但机会随时都有,这取决于我们能否抓住机会。一般观点认为,国内域名注册太深,建议优先考虑外国注册人。外国注册人相对诚实,但价格差别很大,从几美元到几十美元不等。域名投资者应抓住机遇,尽早注册国外域名。
- 公司名字不但要与其经营理念、活动识别相统一,还要能反映公司理念,服务宗旨、商品形象,从而才能使人看到或听到公司的名称就能产生愉快的联想,对商店产生好感。这样有助于公司树立良好的形象。
- 其次,一般域名注册有一个获取密码的按钮,域名注册商点击后会向您发送密码。在得到域名注册商发送的密码后,将其传输到域名服务提供商网站,然后输入密码,此时域名呈现申请状态。提交申请后,原注册人通常会向您发送一封电子邮件,询问您是否同意转让。此时,您只需点击同意转移按钮,域名注册商就可以成功转移。