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)
扫码免费获取资源:
