首页 > 编程语言 >Python 解析西瓜视频 | 无水印高清下载

Python 解析西瓜视频 | 无水印高清下载

时间:2022-12-28 17:40:18浏览次数:48  
标签:西瓜 Python self 水印 高清 url video file data

很多小伙伴都有使用西瓜视频,现在西瓜视频作为字节旗下的全家桶一员,拥有很多优质的视频,是很多自媒体小伙伴需要的。但是如何无水印下载这些西瓜视频呢?却让很多人为难,缺少这个趁手的工具


示例链接:

https://www.ixigua.com/6826594712636359176?id=6819257002665968131&logTag=41f04767e576704d4c3f


打开链接我们 source 页面查看源码,经分析,可以看到Js代码中有SSR_HYDRATED_DATA,这里面的数据是属于页面的具体数据,我们只需要拿到这里的数据,然后根据下标读取数据即可。


Python 解析西瓜视频 | 无水印高清下载_json


我们看到videoResource下面的dynamic_video_list中有四条数据,这里我们选取的是1080P的,发现其中的mian_url时发现它的值字母加数字,不是我们想要的url地址,只是一段字符串,大家如果看到这种大小写字母加数字的加密,可以考虑用base64来试试,经测试可以解码成功。解码后的数据如下:

http://v9-xg-web-pc.ixigua.com/c8aeff4f39bd7ac1bb6bf1ce7d22d603/634f888e/video/tos/cn/tos-cn-vd-0026/0f89613a67cb44f096f5c5a3a313adfd/media-video-avc1/?a=1768&ch=0&cr=0&dr=0&er=0&cd=0%7C0%7C0%7C0&cv=1&br=3297&bt=3297&cs=0&ds=4&mime_type=video_mp4&qs=0&rc=OzgzNzs4aTZlaTY6aTppPEBpajM3ZjlpcGdmdDMzNjczM0BjMzAzMWI0X2IxLzJiLTIzYSNwLmReZjRocWVfLS0wLS9zcw%3D%3D&l=2022101912045001021003903507D66B2C

那到这里的话,我们已经可以成功的获取到,具体的视频地址,打开视频地址,发现播放的视频没有声音,发现还有一个音频文件,用上述同样的方法也可成功的获取到音频链接地址。


到此我们直接请求链接下载视频和音频文件即可,下载成功后的文件可根据ffmpeg进行数据合并即可。


示例代码使用需要注意两个地方:

1. cookie需要换成自己的cookie,不带 cookie 不会返回正确的页面,无法获取到相关的视频数据

2. ffmpeg需要更换成自己的存放位置,不会使用的可以把合并代码屏蔽了。


示例代码:

import requests
import re
import json
import base64
import os
import subprocess
import time




class Xigua(object):
# cookie换成自己的
headers = {
"cookie": "__ac_signature=_02B4Z6wo00f01.afvsgAAIDDdp1EipzTiYv2v7pAAJ7z5d; support_webp=true;"
" support_avif=true; MONITOR_WEB_ID=7155726949787633160; _tea_utm_cache_1300=undefined;"
" ttcid=eaed359f5daa4153b4b40685482e3a6367; ixigua-a-s=1; __ac_nonce=0634e5329007ddcd5542b;"
" msToken=O50hT5X-ZfqTBmSEW86M3H_oHBDjBEA_j89vfaq1FHkvTgPd2rUVqSUl8cDrpz5NsPPqKXPeIx"
"Gy2p6hdcuWiwRRwv4qoW4uqgFfqETDOiSH5J08YrMIxmXbb6jeiA==;"
" tt_scid=7vaFnCJA3efLJiYuS3g3LTFVkuL80JWjWmCwc69uBsG0PMjoBhyQk16yHKmNxQ.Zf81e; ttwid=1%7CEd5O7G3s6F"
"8mQ4ejoDjaK9vIbup9go2Mmngq9JxWIQ4%7C1666079260%7Cb4346288ad2b19ddfe3c6e90f3dd7b3"
"8633dd90735912cb2af983ef5ae62aff3",
"user-agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
}
regx_str = r"<script id=\"SSR_HYDRATED_DATA\">window\._SSR_HYDRATED_DATA=(.*)<\/script><script.*>.*<\/script>"


def __init__(self, video_url):
# pass
video_data = self.url_parse(video_url)
print(video_data)
self.save_file(video_data)


def save_file(self, video_data):
if not os.path.exists('西瓜'):
os.mkdir('西瓜')
video_strem = requests.get(video_data[1], stream=True) # 解析出下载链接并发起下载请求
video_file = open("./西瓜/" + video_data[0] + ".mp4", "wb") # 保存视频
for chunk in video_strem.iter_content(chunk_size=512):
if chunk:
video_file.write(chunk)
print('mp4下载完毕…')


mp3_strem = requests.get(video_data[2], stream=True) # 解析出下载链接并发起下载请求
mp3_file = open("./西瓜/" + video_data[0] + ".mp3", "wb") # 保存视频
for chunk in mp3_strem.iter_content(chunk_size=512):
if chunk:
mp3_file.write(chunk)
print('mp3下载完毕…')
print("音频视频文件合并中……")
self.ff_merg(video_data[0])


def send_request(self, url, params={}):
response = requests.get(url, params=params, headers=self.headers)
return response.content.decode(response.apparent_encoding)


def ff_merg(self, file_name):
# ffmpeg 换成自己的地址 我的是E:/py/ffmpeg/bin/ffmpeg
ffmpegs = 'E:/py/ffmpeg/bin/ffmpeg -i ' + './西瓜/' + file_name + '.mp4' + ' -i ' + './西瓜/' + file_name + '.mp3' + ' -acodec copy -vcodec copy ' + "西瓜/" + file_name + 'bak.mp4'
ff_over = subprocess.Popen(ffmpegs, shell=False)
# for i in range(10000):
# flag = subprocess.Popen.poll(ff_over)
# if flag != None:
# os.remove('./西瓜/' + file_name + '.mp4')
# os.remove('./西瓜/' + file_name + '.mp3')
# print('合并完成!')
# break
# time.sleep(1)


def url_parse(self, video_url):
rtn_page = self.send_request(video_url)
tmp_data = re.search(self.regx_str, rtn_page).group(1)
print(tmp_data)
res_json = tmp_data.replace(":undefined", ':"undefined"').replace("null", '"null"')
json_data = json.loads(res_json)
tmp_json = json_data['anyVideo']['gidInformation']['packerData']['video']
video_base = tmp_json['videoResource']['dash']['dynamic_video']['dynamic_video_list'][-1]['main_url']
audio_base = tmp_json['videoResource']['dash']['dynamic_video']['dynamic_audio_list'][-1]['main_url']
video_title = tmp_json['title']
play_url = base64.b64decode(video_base).decode("utf-8")
audio_url = base64.b64decode(audio_base).decode("utf-8")
return video_title, play_url, audio_url




if __name__ == "__main__":
# video_url = input('请输入音频话题地址:')
video_url = "https://www.ixigua.com/6826594712636359176?id=6819257002665968131&logTag=41f04767e576704d4c3f"
Xg = Xigua(video_url)


标签:西瓜,Python,self,水印,高清,url,video,file,data
From: https://blog.51cto.com/u_15924937/5975815

相关文章

  • Python 通过 requests 解析抖音直播源
    示例代码:importreimportsysimportrequestsDEBUG=Falseheaders={'authority':'v.douyin.com','user-agent':'Mozilla/5.0(iPhone;CPUiPhoneOS10_3_1l......
  • Python批量下载公众号话题下音频文件
    宝宝喜欢听父母讲故事,年轻人喜欢听文章,年纪大的人喜欢听评书,很多人喜欢听不一样的东西,文案能够从文字转化成为语言说出去,那么效果肯定是大有不同。想必在日常生活中,大家都可......
  • Python 多进程下载站点所有小说
    小说,宅男必备,也是当今社会人们打发时间的一种方式。今天给大家分享的,喜欢看小说的同学可以收藏起来了!!目标站点:https://www.zhenhunxiaoshuo.com爬取思路:获取站点分类下的书......
  • python版抖音短视频无水印下载
    如今,各类短视频应用已融入不少人的日常生活。短短几个镜头,可仰望浩瀚星空,也可俯瞰市井烟火;能近距离观察社会肌理,也能深度透视时代景深。点开视频,领略城乡风貌,了解风土人情,足......
  • 利用python爬取百思不得姐demo实例
    作为一个刚接触爬虫的小白,在学习了一定的语法后,第一个目标就是找一个适合初学者的网站来小试牛刀。一般来讲都会选择一个难度系数比较低的网站来进行爬取,这样不仅有助于我们......
  • 【Python 库】bs4的使用
    和lxml一样,BeautifulSoup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据。BeautifulSoup,是一个第三方的库,所以使用之前需要安装,安装方法,输入cmd,调出......
  • python运行环境以及编辑器介绍
    Hello呀,EveryOne,在上次更新了第一篇的公众号推文后,小编也如约的和大家玩起了消失,但是工作还是要进行的,这不又乖乖的回来码字了,废话不再多说,今个带大家来敲下python编写的第......
  • Python爬取意林杂志所有期刊文章
    可能很多人对这个意林杂志比较陌生,但是对于小编来说,那可是满满的回忆。记得我们上中学那时候读过的意林,那可是一本接着一本,其中有很多令人感动的故事,一直被温暖,被治愈。接下......
  • python爬取公众号链接里面的图片
    话不多说,步入今天文章的分享内容,今天给大家带来的是~~爬取微信公众号文章里面的图片。爬虫代码:#coding:utf-8#__auth__="maiz"#__date__="2021/3/27"importosimport......
  • Python中使用xpath一键获取各国国旗
    国旗是一个国家的主权意识不断增强后必然的产物,国旗是国家的一种标志性旗帜,是国家的象征。代表着一个国家的主权和民族的尊严。每个国家的国旗都由特有的颜色和图案构成,这些......