Python实现一键下载视频脚本
作者:OpenHacker 发布时间:2023-08-26 18:51:17
需求
小编通常会上一些专业的视频网站比如腾讯视频、优酷,在上面看电影、电视剧。这些网站有个优点,可以缓存视频,在通勤路上比如地铁就可以愉快的刷剧了,因为地铁上的网速通常不怎么好。
但是有一些经典电影或者电视剧,这些视频并没有提供,那么我们只能上一些 * 网站看了,资源是有了,但是问题来了,这些 * 网站大多数都没有视频下载功能,那在地铁上就没法看了。
如果可以把这些视频下载下来,再传输到手机里不就可以离线看了吗?
接下来小编就演示下如何用 python 脚本来实现一键下载 * 网站的视频。
以下脚本可以学习到
python selenium 的使用
python requests 的使用
分片下载视频存储本地
实时输出视频下载进度
注意:
这里的脚本主要用于测试学习目的,切勿用于生产环境等商业目的
推荐大家访问官方指定平台或专业视频网站,支持正版
解决方案
小编以经常看的在线之家为例,这个网站可以找到很多美剧资源。
首先,我们用谷歌浏览器打开一个视频地址,比如https://www.zxzj.fun/video/1529-1-1.html,按F12或者右击“检查”打开浏览器控制台
然后,点击控制台最左边的选择元素按钮,或者按Ctrl + Shift + C,选择网页的视频区域,就能看到video
标签
<video
class="dplayer-video dplayer-video-current lwebapp.com"
webkit-playsinline=""
playsinline=""
preload="metadata"
src="https://vod.pipi.cn/8f6897d9vodgzp1251246104/1881b495387702292624167851/f0.mp4"
></video>
可以发现src
属性值就是视频链接,并且是采用单独的.mp4
视频地址,这种地址原理上可以直接从浏览器下载的,直接复制这个地址在浏览器打开,就可以右击下载。但是电视剧通常有很多集,每次都手动打开网页-打开控制台-复制视频地址-再打开视频-最后下载视频,就很繁琐。这时候就是脚本排上用场的时候了,可以把这个流程自动化,简化重复操作的过程。
脚本的整体思路
使用
selenium
打开网页通过
selenium
元素选择器找到video
标签所在的iframe
,切换到iframe
通过
video
标签,获取到视频地址,然后请求视频内容采用分片下载的方式拼接视频存储到本地
代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 首发 lwebapp.com
import requests
# 谷歌浏览器驱动
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# sleep模块,让程序停止往下运行
from time import sleep
# 设置谷歌浏览器驱动
driver = webdriver.Chrome()
# 手动改为想要下载的视频所在网页地址
url = 'https://www.zxzj.fun/video/1529-1-1.html'
# 打开网页
driver.get(url)
try:
# 通过元素选择器找到iframe
iframe = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, '#playleft iframe'))
)
except:
driver.quit()
# 获取到网页title,便于直观看到当前下载的视频标题
title = driver.find_elements(By.TAG_NAME, 'title')[
0].get_attribute('innerHTML')
# 切换到iframe
driver.switch_to.frame(iframe)
# 通过video标签获取视频地址
video = driver.find_elements(By.TAG_NAME, 'video')[0]
video_url = video.get_attribute('src')
print('video', video_url)
# 已经获取到视频地址,可以关闭浏览器
driver.quit()
# 设置请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'
}
# 请求视频内容
video_content = requests.get(video_url, headers=headers, stream=True)
print("开始下载")
# 视频大小
contentLength = int(video_content.headers['content-length'])
line = '大小: %.2fMB'
# 大小换算
line = line % (contentLength/1024/1024)
# 打印视频总长度
print(line)
# 存储已经下载的长度
downSize = 0
print('video_name', title)
# 分片下载
with open(title+'.mp4', "wb") as mp4:
for chunk in video_content.iter_content(chunk_size=1024 * 1024):
if chunk:
mp4.write(chunk)
# 记录已下载视频长度,实时输出下载进度
downSize += len(chunk)
print('进度:{:.2%}'.format(downSize / contentLength), end='\r')
print("下载结束")
来源:https://segmentfault.com/a/1190000041230054


猜你喜欢
- 执行python脚本的时候,有时需要获取命令行参数的相关信息。C语言通过argc和argv来获取参数的个数和参数的内容,python中通过s
- 闲的无聊。。。网上一堆,正好练手(主要是新手)# coding=utf-8 import requests from bs4 import
- 插入排序插入排序是一种简单的排序算法,以数组为例,我们可以把数组看成是多个数组组成。插入排序的基本思想是往前面已排好序的数组中插入一个元素,
- 这篇文章主要介绍了基于python traceback实现异常的获取与处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- MySQL日志文件相信大家都有很多的了解,MySQL日志文件一般在:/var/log/mysqld.log,下面就教您修改MySQL日志文件
- python开发者向普通windows用户分享程序,要给程序加图形化的界面(传送门:这可能是最好玩的python GUI入门实例! http
- 说明同学的代码中遇到一个数学公式牵扯到将生成指定的数字存储的一个列表中,那个熊孩子忽然懵逼的不会啦,,,给了博主一个表现的机会,,,哈哈哈好
- 本文实例讲述了Python设置默认编码为utf8的方法。分享给大家供大家参考,具体如下:这是Python的编码问题,设置python的默认编
- 前言网上经常能看到一些文章总结在 mysql 中不能命中索引的各种情况,其中有一种说法就是指使用了 or 的语句都不能命中索引。这种说法其实
- 斐波那契记忆优化法:<script type="text/javascript">var fibonacci
- Gevent官网文档地址:http://www.gevent.org/contents.html进程、线程、协程区分我们通常所说的协程Cor
- argparse 模块是Python内置的用于命令项选项与参数解析的模块,可以轻松编写友好的命令行接口,能够帮助程序员为模型定义参数。传入一
- 本文实现12306抢火车票/京东抢手机示例,具体如下:#12306秒抢Python代码from splinter.browser impor
- 常见的误解有: 1. 只用 ado.net ,无法进行动态 SQL 拼接。 2. 有几个动态参数,代码的重复量就成了这些参数的不同数量的组合
- 本文实例讲述了JS定义函数的几种常用方法。分享给大家供大家参考,具体如下:在 JavaScript 语言里,函数是一种对象,所以可以说函数是
- 先从String的扩展开始吧,后面有一部分的扩展要依赖这里扩展的方法。为了更加清晰和详细,我会一个方法一个方法地贴出来,你完全可以把所有的方
- 项目说明开发php项目管理系统,由于是新项目且已经部署在生产环境,导致需要根据实际使用情况,进行及时的功能升级或bug修复。每次升级,进行程
- 阅读文本前请参考此文章的数据表结构Django提供了两个非常有用的工具:F对象和Q对象,方便了在一些特殊场景下的查询过程。1.F对象查询F对
- created页面加载未渲染html之前执行。mounted渲染html后再执行。由于created在html模板生产之前所以无法对Dom进
- 依赖模块xlwt下载:pip install xlwt后台模块view.py# 导出Excel文件def export_excel(requ