目录

前言

目的

思路

代码实现

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实现视频去水印(文末源码)相关推荐

  1. 零基础教你Unity制作像素鸟游戏 【文末源码】

    爆肝三天终于写完了,一文教你从零开启Unity制作像素鸟游戏 前言 一,新建目录 二,制作材质 三,场景搭建 四,创建地图 五,制作管道 六,创建主角 七,小鸟动起来 八,游戏状态控制 九,摄像机跟随 ...

  2. Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 【文末源码】

    Unity 之 手把手教你实现自己Unity2D游戏寻路逻辑 [文末源码] 前言 一,效果展示 二,场景搭建 三,代码逻辑 四,完善场景 五,使用小结 前言 还在看别人的寻路逻辑?保姆级教程,一步步教 ...

  3. 最新版去水印小程序源码/基于WordPress的短视频去水印小程序源码

    最新版去水印小程序源码,基于WordPress的短视频去水印小程序源码.本版本全开源,是Wordpress插件 上传到Wordpress 安装插件,启动之后绑定自己的小程序id就可以了. wordpr ...

  4. Python数据分析实战【九】:用Python处理省份城市编码数据【文末源码地址】

    文章目录 项目背景 项目代码 新增省份编码 获取编码映射数据 合并数据 统计省份用户数 使用SQL实现 源码地址 本文可以学习到以下内容: 免费获取全国省份.城市编码以及经纬度数 使用 pandas ...

  5. Python数据分析实战【六】:用Python实现自动发送邮件和发送钉钉消息【文末源码地址】

    目录 发送邮件源码 发送钉钉消息源码 源码地址 本文可以学习到以下内容: 使用requests库发送钉钉消息 使用email和smtplib库发送邮件 使用163邮箱服务,自动发送邮件及附件 发送邮件 ...

  6. 用Python给娃送上一份猪年春节礼物。文末源码!

    随着农历猪年的到来,Pig的卡通形象以火爆的热度迅速成为大家心中的新一任萌宠,尤其是深受小朋友喜欢的小猪佩奇,作为一枚关心热点又家有小娃的非典型程序猿小编,也来蹭蹭热点,让我们用Python来送给娃一 ...

  7. 绝了!你裁我剪,斯尼帕!文末源码

    2018年我入手了一台Swithc『 你裁我剪!斯尼帕』是我玩过的最为欢乐游戏,不过为了安全安全起见,大概只玩了十几关! 因为它的威力不亚与『分手厨房』,需要两人密切配合,但这个过程很容易两个人闹矛盾 ...

  8. 程序员带你回味童年,一起用C语言做一个“推箱子”玩!【文末源码】

    这篇文章是用C语言做了一个推箱子小游戏,实现起来比较简单,和大家一起回味一下童年捧着按键机玩推箱子的日子!文末附带万字源码! 目录 一.写在前面 二.设计思路 1.主界面函数介绍 2.选择界面函数 3 ...

  9. 新版短视频去水印小程序源码 支持多家短视频平台去水印

    环境要求: 环境推荐 Linux + 宝塔面板 + Nginx + php5.6 此源码必须安装在一级目录,不支持二级目录 使用条件:备案域名(不支持IP) 程序亲测可用 以去除授权,文件全开源,可二 ...

最新文章

  1. (转)python中的*args和**kw到底是个啥。看下面的例子就会懂了
  2. Linux下VNC配置多个桌面和修改密码 不会当系统重启vnc失效
  3. tomcat如何部署.net程序_.NET 程序员如何学习Vue
  4. 【飞秋】位运算与组合搜索(二)
  5. 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
  6. 判断response.data是否为空
  7. 高速收发器之8B/10B编码
  8. GPU/GPGPU架构(三十二)
  9. AJAX TabContainer 样式设置
  10. Parallel垃圾回收器总结
  11. kaldi 声纹识别系统(1)原理解析:基于x-vector
  12. 京瓷1125打印机清零_京瓷1125驱动下载
  13. java excel 边框颜色_java(jxl) 改变excel表格背景及边框
  14. LabWindows 读写 Excel
  15. 安卓apkcpu占用过高_Android CPU占用高问题分析
  16. 免上传音乐外链(QQ音乐)
  17. js判断一个元素是否在数组中存在
  18. 实例:下载所有XKCD漫画
  19. 船长的error笔记
  20. 自旋锁以及Java中的自旋锁的实现

热门文章

  1. 2010南非世界杯半决赛预测
  2. Android实现图片相似度
  3. 产品经理 vs PhD
  4. 杭州阿拉丁信息科技有限公司
  5. 面向方面情感分析的双句法感知图注意网络
  6. Pandas知识点超全总结
  7. 微信支付分 - 接口调用几个重要参数获取
  8. 力控批量添加变量_力控的60个经典问题解答
  9. crawler爬虫java实例,Crawler4j快速入门实例
  10. window下最新版的EMQX4.4.3服务器的搭建和用户名密码的设置