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)

扫码免费获取资源: