35. 实战:Python实现视频去水印(文末源码)
目录
前言
目的
思路
代码实现
1. 请求URL,查看源代码
2. 源代码中没有就去抓包工具
3. 拿到视频源链接,继续检索来源
4. 拿到数据和链接,二进制写入到本地
完整源码
运行效果
总结
前言
我们在刷某短视频平台时,有些视频我们想保存到本地观看,但未开放下载渠道,或者我们想下载来收藏或者做成动态壁纸,但是有水印,就很恼火。
网页连接放评论区 网页连接放评论区 网页连接放评论区 网页连接放评论区
就这个问题,我们写一个小小的程序来实现去水印的功能。
目的
给定URL,实现去除水印下载视频的操作。
网页连接放评论区 网页连接放评论区 网页连接放评论区 网页连接放评论区
思路
1. 请求URL,查看源代码
2. 源代码中没有就去抓包工具
3. 拿到视频源链接,继续检索来源
4. 拿到数据和链接,二进制写入到本地
网页连接放评论区 网页连接放评论区 网页连接放评论区 网页连接放评论区
代码实现
1. 请求URL,查看源代码
请求到主页,检查元素,看视频是否包含在源代码中,结果发现是没有的。
当然,请求URL也少不了必要的请求头,伪装请求头如下:
url = '见评论区'
headers = {'cookie': 'douyin.com; __ac_nonce=063d749310021f8bd394b; __ac_signature=_02B4Z6wo00f01R8urHgAAIDBnyxWOmwmfMUfDqjAACQfd6; ttwid=1%7CtRZY98IpvYfhjM-VRDQHgX3mgPcfWwWxylxnwwC7fFk%7C0%7C9af2c384c7d2b4e10ec0497fce797af996c72dd3868ec040595de36132c01ad0; home_can_add_dy_2_desktop=%220%22; passport_csrf_token=ee0cbadbf97ac430daac207c46997ca1; passport_csrf_token_default=ee0cbadbf97ac430daac207c46997ca1; strategyABtestKey=%221675053365.079%22; s_v_web_id=verify_ldibiwgl_ycqaypzT_aJxd_4ZEW_9iGD_XkAPFGlhzwd3; AB_LOGIN_GUIDE_TIMESTAMP=%221675053363589%22; msToken=L3xfxnCP4kW9_qabjW3S1cud_5DmI99tIEOw1_lJDMgdp1GJ9KQd6HWXKepYY-7iLlj4SR_V02zL3lYO6FVnXoPPVNneC5bD9cEnYN4nNpXzaNmvq7oA; ttcid=a598309ef5f3442b95f1d979574083f925; tt_scid=Px0Q21O38QIdeziR7nBXUqfZYJaS4qKakt5Zkfio72r9U4XaJdOYTb37LsjIrRLQca96; msToken=xibNm7RgEpzX8c6UaAgkzAOHMr5TcWNmNbfFR1vD-3uNUhtRXEqVQrmPIV6iDsnsA3WhMCTIOGDtST_F9GEyq8In6Dj7ug-RXsQ6dWDIjzE3OXKr5dlj','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}
resp = requests.get(url=url, headers=headers)
其中最重要的就是Cookie和User-Agent
2. 源代码中没有就去抓包工具
3. 拿到视频源链接,继续检索来源
4. 拿到数据和链接,二进制写入到本地
下面可以用正则表达式获取视频标题作为一会保存到本地的文件名
还是用正则抓取刚刚script部分包裹的视频信息,url解码后用pprint将字典美观打印
发现有规律可循,一层一层扒开以后找到了视频url的精准位置
# 正则抓标题
obj = re.compile(r"<span><span><span><span>(?P<title>.*?)</span></span></span></span>", re.S)
title = obj.search(resp.text).group("title")
# print(title)# 正则抓视频信息
info = re.findall('<script id="RENDER_DATA" type="application/json">(.*?)</script', resp.text)[0]
# print(info)# url解码
html_data = urllib.parse.unquote(info)
html_data = json.loads(html_data)
# pprint(html_data) # 让字典更加美观# 字典取值,拿视频播放链接
video_url = 'https:' + html_data['41']['aweme']['detail']['video']['bitRateList'][0]['playAddr'][0]['src']
print(video_url)
最后就是最简单的保存视频
# 获取视频二进制数据
video_content = resp = requests.get(url=video_url, headers=headers).content# 保存视频
if not os.path.exists('./4_video_without_watermark'):os.mkdir('./4_video_without_watermark')
with open('./4_video_without_watermark/' + title + '.mp4', mode='wb') as f:f.write(video_content)
完整源码
import requests
import re
import json
import urllib
from urllib import parse
import os
from pprint import pprint"""常规找视频资源:到Network --> Media里面抓包,就能得到地址然后在Media里面拿到地址,去全局搜索URL来源
"""url = '见评论区'
headers = {'cookie': 'douyin.com; __ac_nonce=063d749310021f8bd394b; __ac_signature=_02B4Z6wo00f01R8urHgAAIDBnyxWOmwmfMUfDqjAACQfd6; ttwid=1%7CtRZY98IpvYfhjM-VRDQHgX3mgPcfWwWxylxnwwC7fFk%7C0%7C9af2c384c7d2b4e10ec0497fce797af996c72dd3868ec040595de36132c01ad0; home_can_add_dy_2_desktop=%220%22; passport_csrf_token=ee0cbadbf97ac430daac207c46997ca1; passport_csrf_token_default=ee0cbadbf97ac430daac207c46997ca1; strategyABtestKey=%221675053365.079%22; s_v_web_id=verify_ldibiwgl_ycqaypzT_aJxd_4ZEW_9iGD_XkAPFGlhzwd3; AB_LOGIN_GUIDE_TIMESTAMP=%221675053363589%22; msToken=L3xfxnCP4kW9_qabjW3S1cud_5DmI99tIEOw1_lJDMgdp1GJ9KQd6HWXKepYY-7iLlj4SR_V02zL3lYO6FVnXoPPVNneC5bD9cEnYN4nNpXzaNmvq7oA; ttcid=a598309ef5f3442b95f1d979574083f925; tt_scid=Px0Q21O38QIdeziR7nBXUqfZYJaS4qKakt5Zkfio72r9U4XaJdOYTb37LsjIrRLQca96; msToken=xibNm7RgEpzX8c6UaAgkzAOHMr5TcWNmNbfFR1vD-3uNUhtRXEqVQrmPIV6iDsnsA3WhMCTIOGDtST_F9GEyq8In6Dj7ug-RXsQ6dWDIjzE3OXKr5dlj','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}
resp = requests.get(url=url, headers=headers)
# resp = urllib.parse.unquote(resp.text)
# print(resp.text)# 正则抓标题
obj = re.compile(r"<span><span><span><span>(?P<title>.*?)</span></span></span></span>", re.S)
title = obj.search(resp.text).group("title")
# print(title)# 正则抓视频信息
info = re.findall('<script id="RENDER_DATA" type="application/json">(.*?)</script', resp.text)[0]
# print(info)# url解码
html_data = urllib.parse.unquote(info)
html_data = json.loads(html_data)
# pprint(html_data) # 让字典更加美观# 字典取值,拿视频播放链接
video_url = 'https:' + html_data['41']['aweme']['detail']['video']['bitRateList'][0]['playAddr'][0]['src']
print(video_url)# 获取视频二进制数据
video_content = resp = requests.get(url=video_url, headers=headers).content# 保存视频
if not os.path.exists('./4_video_without_watermark'):os.mkdir('./4_video_without_watermark')
with open('./4_video_without_watermark/' + title + '.mp4', mode='wb') as f:f.write(video_content)
运行效果
运行后输出视频直链,并已经将视频保存到本地指定文件夹。
总结
本节实战了某短视频平台视频去水印的过程,较为综合,适合巩固爬虫基础知识。
35. 实战:Python实现视频去水印(文末源码)相关推荐
- 零基础教你Unity制作像素鸟游戏 【文末源码】
爆肝三天终于写完了,一文教你从零开启Unity制作像素鸟游戏 前言 一,新建目录 二,制作材质 三,场景搭建 四,创建地图 五,制作管道 六,创建主角 七,小鸟动起来 八,游戏状态控制 九,摄像机跟随 ...
- Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】
Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 [文末源码] 前言 一,效果展示 二,场景搭建 三,代码逻辑 四,完善场景 五,使用小结 前言 还在看别人的寻路逻辑?保姆级教程,一步步教 ...
- 最新版去水印小程序源码/基于WordPress的短视频去水印小程序源码
最新版去水印小程序源码,基于WordPress的短视频去水印小程序源码.本版本全开源,是Wordpress插件 上传到Wordpress 安装插件,启动之后绑定自己的小程序id就可以了. wordpr ...
- Python数据分析实战【九】:用Python处理省份城市编码数据【文末源码地址】
文章目录 项目背景 项目代码 新增省份编码 获取编码映射数据 合并数据 统计省份用户数 使用SQL实现 源码地址 本文可以学习到以下内容: 免费获取全国省份.城市编码以及经纬度数 使用 pandas ...
- Python数据分析实战【六】:用Python实现自动发送邮件和发送钉钉消息【文末源码地址】
目录 发送邮件源码 发送钉钉消息源码 源码地址 本文可以学习到以下内容: 使用requests库发送钉钉消息 使用email和smtplib库发送邮件 使用163邮箱服务,自动发送邮件及附件 发送邮件 ...
- 用Python给娃送上一份猪年春节礼物。文末源码!
随着农历猪年的到来,Pig的卡通形象以火爆的热度迅速成为大家心中的新一任萌宠,尤其是深受小朋友喜欢的小猪佩奇,作为一枚关心热点又家有小娃的非典型程序猿小编,也来蹭蹭热点,让我们用Python来送给娃一 ...
- 绝了!你裁我剪,斯尼帕!文末源码
2018年我入手了一台Swithc『 你裁我剪!斯尼帕』是我玩过的最为欢乐游戏,不过为了安全安全起见,大概只玩了十几关! 因为它的威力不亚与『分手厨房』,需要两人密切配合,但这个过程很容易两个人闹矛盾 ...
- 程序员带你回味童年,一起用C语言做一个“推箱子”玩!【文末源码】
这篇文章是用C语言做了一个推箱子小游戏,实现起来比较简单,和大家一起回味一下童年捧着按键机玩推箱子的日子!文末附带万字源码! 目录 一.写在前面 二.设计思路 1.主界面函数介绍 2.选择界面函数 3 ...
- 新版短视频去水印小程序源码 支持多家短视频平台去水印
环境要求: 环境推荐 Linux + 宝塔面板 + Nginx + php5.6 此源码必须安装在一级目录,不支持二级目录 使用条件:备案域名(不支持IP) 程序亲测可用 以去除授权,文件全开源,可二 ...
最新文章
- (转)python中的*args和**kw到底是个啥。看下面的例子就会懂了
- Linux下VNC配置多个桌面和修改密码 不会当系统重启vnc失效
- tomcat如何部署.net程序_.NET 程序员如何学习Vue
- 【飞秋】位运算与组合搜索(二)
- 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
- 判断response.data是否为空
- 高速收发器之8B/10B编码
- GPU/GPGPU架构(三十二)
- AJAX TabContainer 样式设置
- Parallel垃圾回收器总结
- kaldi 声纹识别系统(1)原理解析:基于x-vector
- 京瓷1125打印机清零_京瓷1125驱动下载
- java excel 边框颜色_java(jxl) 改变excel表格背景及边框
- LabWindows 读写 Excel
- 安卓apkcpu占用过高_Android CPU占用高问题分析
- 免上传音乐外链(QQ音乐)
- js判断一个元素是否在数组中存在
- 实例:下载所有XKCD漫画
- 船长的error笔记
- 自旋锁以及Java中的自旋锁的实现