需求

我通常会上一些专业的视频网站比如腾讯视频、优酷,在上面看电影、电视剧。这些网站有个优点,可以缓存视频,在通勤路上比如地铁就可以愉快的刷剧了,因为地铁上的网速通常不怎么好。

但是有一些经典电影或者电视剧,这些视频并没有提供,那么我们只能上一些小电影网站看了,资源是有了,但是问题来了,这些小电影网站大多数都没有视频下载功能,那在地铁上就没法看了。

如果可以把这些视频下载下来,再传输到手机里不就可以离线看了吗?

接下来小编就演示下如何用 python 脚本来实现一键下载小电影网站的视频。

以下脚本可以学习到

  • python selenium 的使用
  • python requests 的使用
  • 分片下载视频存储本地
  • 实时输出视频下载进度

注意:

  1. 这里的脚本主要用于测试学习目的,切勿用于生产环境等商业目的
  2. 推荐大家访问官方指定平台或专业视频网站,支持正版

解决方案

小编以经常看的在线之家为例,这个网站可以找到很多美剧资源。

首先,我们用谷歌浏览器打开一个视频地址,比如 https://www.zxzj.fun/video/1529-1-1.html ,按 F12 或者右击“检查”打开浏览器控制台

然后,点击控制台最左边的选择元素按钮,或者按 Ctrl + Shift + C ,选择网页的视频区域,就能看到 video 标签

<videoclass="dplayer-video dplayer-video-current"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 -*-
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:# 通过元素选择器找到iframeiframe = 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 = 0print('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("下载结束")

总结

以上简单展示了使用 python 的 requests 、 selenium 库来下载一个 mp4 视频,可以当做一个学习案例。

其中还有很多待改进的地方

url

后续有时间再来分享更多有趣实用的 python 脚本。

Python一键下载视频脚本分享相关推荐

  1. python脚本视频_分享一个Python下载视频脚本

    分享一个Python下载视频脚本(通过flvcd.com代理的) 代码如下: #!/usr/local/bin/python #test for command line parameter(s) # ...

  2. 知乎有很多好玩的微信8.0状态视频,用Python一键下载

    微信 8.0 版本更新后,可以设置个人状态,状态里面可以添加火录制视频,很快状态视频就火了,可以看下知乎热榜有没有微信8.0状态沙雕又可爱的视频或图片?[1].比如我也设置了一个: 于是我就想把这些视 ...

  3. python 一键下载酷狗歌单

    python 一键下载酷狗歌单 酷狗很多音乐下载都需要钱,于是我就想使用python进行爬取.在网上找了一圈,全是需要一首一首歌来找然后列出url.但是,谁又有耐心去找呢.于是我花了2小时写了这个脚本 ...

  4. python教程下载视频-python怎么下载视频

    在进行爬虫的时候,经常需要保存视频到本地.通常得先获得视频(.mp4)的下载链接,再设置保存到本地的路径(路径包括最后的命名, 例如:D:/1.mp4),因此函数传入的参数为url和path. 例子: ...

  5. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享

    linux系统使用python获取cpu信息脚本分享 代码如下: #!/usr/bin/env Python from __future__ import print_function from co ...

  6. python教程视频下载-python怎么下载视频

    在进行爬虫的时候,经常需要保存视频到本地.通常得先获得视频(.mp4)的下载链接,再设置保存到本地的路径(路径包括最后的命名, 例如:D:/1.mp4),因此函数传入的参数为url和path. 例子: ...

  7. python爬虫 下载视频网站视频

    python爬虫 下载视频网站视频 xpath解析页面源码 requests.Session() 解决 status_code 302 网页重定向 selenium 获取网页遇到 iframe 标签解 ...

  8. Python: 一键下载小说(一)

    Python: 一键下载小说(一) 前言 分析 流程简述 实现 附录 模块 os.path re requests scrapy 前言 前段时间写了个双引擎分章节下载存储小说的思路简述.对于一些没有特 ...

  9. 宝藏下载神器,python一键下载B站视频

    B站无疑是一个宝藏地带,作为一个宝藏(老)男孩,请自行忽略(老)字,B站,一个学习的天堂,请一定珍惜,好好使用!作为吃灰党资深成员,一些的好的视频无疑需要进收藏夹吃灰,相信各位好机油肯定收藏了不少小姐 ...

最新文章

  1. Metasploit resource命令技巧
  2. 3月28日云栖精选夜读:小程序,会是下一个创业风口吗?
  3. SQLyog连接Mysql8.0提示 Authentication plugin ‘caching_sha2_password‘ cannot be loaded
  4. leetcode1029. 两地调度(贪心算法)
  5. 用原生PHP做Blog系统-Day01
  6. 在web应用程序中使用MemcachedClient
  7. SpringCloud工作笔记064---intellij idea 如何将一个普通项目转换为maven项目
  8. DTFT、DFT、FFT
  9. OSChina 周一乱弹 —— 有钱人的故事真让人心动
  10. 黑暗森林:知识图谱的前世今生
  11. 屏蔽点击BackSpace键页面后退
  12. Microsemi Libero SoC 教程1 (Libero开发环境)
  13. fir.im Weekly - 揭秘直播移动 APP 技术实现
  14. jdm分布式架构框架
  15. java敌人发射子弹
  16. 2022年苏州大学872真题整理【回忆版】
  17. 哥本哈根诠释(Copenhagen Interpretation)
  18. 【C# 基础】— 解决 winForm 引用 Adobe PDF Reader控件不显示pdf 文件 问题
  19. 传智播客html5案例,html5 传智播客
  20. Homebrew macOS 包管理

热门文章

  1. 【宝塔建站】Ubuntu下使用宝塔面板一键搭建Z-Blog个人博客
  2. python中的mul函数_mul函数的具体用法
  3. uni-simple-router 注意事项
  4. qgis切片下载与本地部署以及调用
  5. Python编程之反向输出列表
  6. 18将中文按照拼音的顺序进行排序
  7. 中标麒麟系统u盘安装_骨灰级菜鸟用U盘装中标麒麟v5.0
  8. pve虚拟机能装linux,PVE虚拟机增加硬盘
  9. 【项目】数仓项目(十)
  10. package 与 package-lock文件的区别