Python实现视频下载与合成的示例代码

目录
  • 模块使用
  • 开发环境
  • 案例实现
    • 1.明确需求
    • 2.代码实现步骤
  • 实现代码

模块使用

requests >>> pip install requests (数据请求 第三方模块)

re # 正则表达式 去匹配提取数据

json

开发环境

Python 3.8 解释器

Pycharm 2021.2 版本 建议

win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源

案例实现

1.明确需求

采集内容, 先分析一个视频是从哪里获取

通过开发者工具进行抓包分析, 分析视频数据可以从哪里获取内容 格式 m3u8视频内容

当我们网站视频格式 是m3u8的时候, 有一个专门存放所有ts视频片段的文件

2.代码实现步骤

  • 发送请求
  • 获取数据
  • 解析数据
  • 保存数据

1. 发送请求, 对于视频播放页面url地址发送请求

2. 获取数据, 获取服务器返回response响应数据

3. 解析数据, 提取我们想要的数据内容 视频标题 以及 m3u8 链接

4. 发送请求, 对于 m3u8 链接 发送请求

5. 获取数据, 获取服务器返回response响应数据

6. 解析数据, 提取所有ts文件url [视频片段]

7. 保存数据, 把所有视频保存下来, 然后合成为一个整体视频内容

实现代码

import requests  # 数据请求模块 pip install requests  在cmd里面 输入命令
import re  # 导入正则表达式模块 内置模块
import json
import pprint  # 格式化输出模块

for page in range(1, 17):
    print(f'--------------------正在采集第{page}页的数据内容--------------------')
    list_url = 'https://www.acfun.cn/u/45321802'
    # 批量 ctrl + R 选中目标
    data = {
        'quickViewId': 'ac-space-video-list',
        'reqID': page + 1,
        'ajaxpipe': '1',
        'type': 'video',
        'order': 'newest',
        'page': page,
        'pageSize': '20',
        't': '1649944573765',
    }
    headers = {
        # 'cookies': '你的cookie',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
    }
    # get请求 有一个params参数
    # post请求 data 参数
    response = requests.get(url=list_url, params=data, headers=headers)
    # print(response.text)
    id_list = re.findall('a href=.*?ac(.*?)"', response.text)
    for index in id_list:
        video_id = index.replace('\\', '')
        """
        1. 发送请求, 对于视频播放页面url地址发送请求
            用python代码去模拟浏览器 对于 url地址发送请求
        video
        """
        url = f'https://www.acfun.cn/v/ac{video_id}'  # 确定请求url地址
        # 请求头 用伪装python代码, 为了被服务器识别出来 是爬虫程序 一种简单反反爬手段 当你加ua 得到数据的时候, 可能要cookie
        # 需要登陆才能获得数据的, 需要加cookie 用户信息, 常用于检测是否登陆账号
        headers = {
            # 'cookies': '你的cookie',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
        }
        # 通过requests模块里面get请求方式, 对于url地址发送请求, 并且携带上headers请求头伪装, 最后用response自定义变量接收返回数据
        response = requests.get(url=url, headers=headers)
        # 2. 获取数据
        # print(response.text)
        # 3. 解析数据 通过re模块里面findall的方法 在response.text里面去找寻 标题数据 re.S 匹配换行
        # 正则表达式提取出来的数据返回都是列表数据类型  实现过程不重要, 方式方法很多, 你喜欢用哪个都可以 只要可以取到数据都OK
        title = re.findall('<title >(.*?) - AcFun弹幕视频网 - 认真你就输啦 \(\?ω\?\)ノ- \( ゜- ゜\)つロ</title>', response.text)[0]
        video_info = re.findall('window.pageInfo = window.videoInfo = (.*?);', response.text)[0]

        # print(video_info) # 字符串转成字典 怎么转  最稳妥查看数据类型 直接用 type() 这个函数去查看
        json_data = json.loads(video_info)
        # pprint.pprint(json_data)
        # 字典取值 根据冒号左边的内容(键) 提取冒号右边的内容(值)
        m3u8_url = \
        json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]
        # print(title)
        # print(m3u8_url)
        # 通过requests模块里面get请求方式, 对于m3u8_url地址发送请求, 并且携带上headers请求头伪装, 获取响应体文本数据, 用m3u8_data自定义变量接收数据
        m3u8_data = requests.get(url=m3u8_url, headers=headers).text
        # split() 字符串分割
        m3u8_data = re.sub('#E.*', '', m3u8_data).split()
        # print(m3u8_data)
        for ts in m3u8_data:
            ts_url = 'https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts
            ts_content = requests.get(url=ts_url, headers=headers).content
            # ab 是什么意思 a追加保存, b 二进制数据 ab 以二进制数据追加保存
            with open('video\\' + title + '.mp4', mode='ab') as f:
                f.write(ts_content)
        print('视频保存完成: ', title)

视频教程

到此这篇关于Python实现视频下载与合成的示例代码的文章就介绍到这了,更多相关Python视频下载 合成内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-04-13

Python爬虫实战之批量下载快手平台视频数据

知识点 requests json re pprint 开发环境: 版 本:anaconda5.2.0(python3.6.5) 编辑器:pycharm 案例实现步骤: 一. 数据来源分析 (只有当你找到数据来源的时候, 才能通过代码实现) 1.确定需求 (要爬取的内容是什么?) 爬取某个关键词对应的视频 保存mp4 2.通过开发者工具进行抓包分析 分析数据从哪里来的(找出真正的数据来源)? 静态加载页面 笔趣阁为例 动态加载页面 开发者工具抓数据包 [付费VIP完整版]只要看了就能学会的教程,

Python实现一键下载视频脚本

目录 需求 解决方案 代码 总结 需求 小编通常会上一些专业的视频网站比如腾讯视频.优酷,在上面看电影.电视剧.这些网站有个优点,可以缓存视频,在通勤路上比如地铁就可以愉快的刷剧了,因为地铁上的网速通常不怎么好. 但是有一些经典电影或者电视剧,这些视频并没有提供,那么我们只能上一些小电影网站看了,资源是有了,但是问题来了,这些小电影网站大多数都没有视频下载功能,那在地铁上就没法看了. 如果可以把这些视频下载下来,再传输到手机里不就可以离线看了吗? 接下来小编就演示下如何用 python 脚本来实

python实现bilibili动画下载视频批量改名功能

bilib应用 在微软商店中下载哔哩哔哩动画,虽然软件UI古老,但是贵在稳定和支持下载 安装以后搜索自己想要的视频,然后缓存下载 下载后进入下载的路径 视频文件重命名 打开自动命令的程序或者py脚本,选择视频合集下载的路径 选择是否自动添加序号 最后在下载目录的video下面可以找到整合好的视频 打包成exe程序 pyinstaller -F -w -i rename.ico rename.py python脚本 import os import sys import json import s

用Python下载抖音无水印视频的方法

分享学习Python爬虫.数据分析.数据挖掘的点滴. 最近发现了抖音无水印视频的下载方法. # 抖音接口 「url」参数值就是从抖音上复制的链接. Python下载 首先来看一下,直接访问抖音链接得到的结果. 妥妥的水印... 接下来打开浏览器的开发者工具,看看视频的地址. 可以发现「playAddr」就是视频的地址,复制然后访问. 链接会重定向到以「v9」开头的链接,然而还是有水印. 接下来就是重点了,首先你需要让你的浏览器能够修改UA,即爬虫经常用到的「User-Agent」. 我用的是Ma

Python下载手机小视频的操作方法

目录 启动 mitmproxy 手机网络配置 下载页 编写下载脚本 今天为大家介绍使用 mitmproxy 这个抓包工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来. 启动 mitmproxy 首先我们通过执行命令 mitmweb 启动mitmproxy,让它处理监听状态,服务会监听本机 8080 端口,启动后如下: $ mitmweb Web server listening at http://127.0.0.1:8081/ Proxy server listening at h

基于Python制作B站视频下载小工具

目录 1. 原理简介 2. 网页分析 3. 视频爬取 4. 存入本地 5. GUI工具制作 1. 原理简介 原理很简单,就是获取视频资源的源地址,然后爬取视频的二进制内容,再写入到本地即可. 2. 网页分析 打开该网页,然后F12进入开发者模式,接着点开网络—>全部,因为视频资源一般比较大,我这里根据大小进行了从大到小的排序,找到了第一条这些可能和视频源地址有关. 然后,我们复制找到的这条里的url部分不变的部分,回到元素中ctrl+F搜索,找到了可能和视频源地址有关的节点. 果然,我们复制这部

基于Python制作图像完美超分处理工具

目录 前言 安装 使用 图片超分 视频超分 项目说明 代码说明 总结 前言 很久没更新这个专栏了,最近比较忙.前段时间看到了这个模型觉着很有意思,弄下来自己玩了玩,但是没时间写文章,一直搁置到现在. 废话不多说,先上Github地址: RealBasicVSR地址 从给出的效果来看,还是很不错的,左侧是超分后的画面,右边是原画质,得到明显提升.下面我说一下我的安装过程,还有一些使用中的踩坑,让大家去测试项目的时候可以提前规避. 安装 项目拉下来之后,我们先打开README,看看说明. 安装的步骤

基于Python制作一个多进制转换工具

目录 前言 主要步骤 完整代码 前言 学习资料下载链接 提取码:tha8  进制转换计算工具含源文件 主要步骤 导入模块 import tkinter from tkinter import * import tkinter as tk from tkinter.ttk import * 整个框架的主结构 root = Tk() root.title('贱工坊-进制转换计算') # 程序的标题名称 root.geometry("580x400+512+288") # 窗口的大小及页面的

基于PyQt5制作Excel文件数据去重小工具

需求说明:将单个或者多个Excel文件数据进行去重操作,去重的列可以通过自定义制定. 开始源码说明之前,先说明一下工具的使用过程. 1.准备需要去重的数据文件. 2.使用工具执行去重操作. 3.处理完成后的结果文件. PyQt5 界面UI相关的模块引用 from PyQt5.QtWidgets import * from PyQt5.QtGui import * 核心组件 from PyQt5.QtCore import * 主题样式模块引用 from QCandyUi import Candy

python b站视频下载的五种版本

项目地址: https://github.com/Henryhaohao/Bilibili_video_download 介绍 对于单P视频:直接传入B站av号或者视频链接地址(eg: 49842011或者https://www.bilibili.com/video/av49842011) 对于多P视频: 1.下载全集:直接传入B站av号或者视频链接地址(eg: 49842011或者https://www.bilibili.com/video/av49842011) 2.下载其中一集:传入那一集

基于Python制作天眼查小程序的示例代码

目录 界面搭建 整体布局 界面美化 天眼查爬虫 获取信息 代码编写 结果展示 今天我们一起来制作一个天眼查GUI程序,开宗明义,我们先来看下最终的效果 这次的GUI程序,我们使用的框架是PyQt5,该框架拥有比tkinter更为丰富的内置组件,在界面美化方面,貌似也更胜一筹! 从上图也可以看出,我们的目标还是蛮远大的,最终我们希望可以完成一个工具集合,把我们日常当中常用的功能都集成的该GUI程序中,比如天眼查公司信息,知乎用户知识图谱,B视频弹幕抓取等等. 好了,今天我们先完成天眼查的功能吧~

基于Python制作一个文件去重小工具

目录 前言 实现步骤 补充 前言 常常在下载网络素材时有很多的重复文件乱七八糟的,于是想实现一个去重的操作. 主要实现思路就是遍历出某个文件夹包括其子文件夹下面的所有文件,最后,将所有文件通过MD5函数的对比筛选出来,最后将重复的文件移除. 实现步骤 用到的第三方库都比较的常见,其中只有hashlib是用来对比文件的不是很常见.其他的都是一些比较常见的第三方库用来做辅助操作. import os # 应用文件操作 import hashlib # 文件对比操作 import logging #

如何基于Python制作有道翻译小工具

这篇文章主要介绍了如何基于Python制作有道翻译小工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 该工具主要是利用了爬虫,爬取web有道翻译的内容. 然后利用简易GUI来可视化结果. 首先我们进入有道词典的首页,并点击翻译结果的审查元素 之后request响应网页,并分析网页,定位到翻译结果. 使用tkinter来制作一个建议的GUI 期间遇到的一个问题则是如何刷新翻译的结果,否则的话会在text里一直累加翻译结果. 于是,在mainlo

基于python对B站收藏夹按照视频发布时间进行排序的问题

前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难,因此就对收藏夹里面的视频进行了分类.但是分类之后紧接着又出现了一个新的问题:原来存放在默认收藏夹里面视频的相对顺序被打乱了--明明前几天刚收藏的视频却要翻很多很多页才能找到,因此有了这个程序. 程序的作用 因为我们看到的视频大部分都是通过推荐得到的,而推荐的视频大部分都是刚发布不久,因此大部分收藏的视频的顺序也基本是按照视频发布的顺序来的.那么通过程序

基于Python制作打地鼠小游戏

效果展示 打地鼠小游戏 简介 打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠呗~ 首先,让我们确定一下游戏中有哪些元素.打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类呗: '''地鼠''' class Mole(pygame.sprite.Sprite): def __init__(self, image_paths, position, **kwargs): pygame.sprite.Sprite.__init__(self) self.