爬虫案例-爬取某站视频

时间:2025-03-25 08:41:06
import requests import os from urllib.parse import urlparse import subprocess # 视频和音频URL video_url = "https://upos-sz-mirrorbd.bilivideo.com/upgcxcode/46/89/28747958946/28747958946-1-100022.m4s" audio_url = "https://cn-gdgz-gd-live-02.bilivideo.com/upgcxcode/46/89/28747958946/28747958946-1-30216.m4s" # 请求头 header = { "Referer": "https://www.bilibili.com/video/av576765795?spm_id_from=333.788.player.player_end_recommend_autoplay", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0" } # 视频请求参数 video_params = { "e": "ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=", "uipk": "5", "nbs": "1", "deadline": "1742734058", "gen": "playurlv2", "os": "bdbv", "oi": "1996673551", "trid": "236892f04e4743a7a3da62f279953324u", "mid": "0", "platform": "pc", "og": "hw", "upsig": "d8a8f509632b390e62c65ba33d7b8342", "uparams": "e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og", "bvc": "vod", "nettype": "0", "orderid": "0,3", "buvid": "362FA75D-BD0F-DC0D-E2AE-34526182765756167infoc", "build": "0", "f": "u_0_0", "agrr": "1", "bw": "18402", "logo": "80000000" } # 音频请求参数 audio_params = { "e": "ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=", "uipk": "5", "nbs": "1", "deadline": "1742734058", "gen": "playurlv2", "os": "bcache", "oi": "1996673551", "trid": "0000236892f04e4743a7a3da62f279953324u", "mid": "0", "platform": "pc", "og": "hw", "upsig": "e0007fe3f8ffbf93d9c37a85134bda3c", "uparams": "e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og", "cdnid": "6697", "bvc": "vod", "nettype": "0", "orderid": "0,3", "buvid": "362FA75D-BD0F-DC0D-E2AE-34526182765756167infoc", "build": "0", "f": "u_0_0", "agrr": "1", "bw": "6238", "logo": "80000000" } # 发送请求并下载视频 video_response = requests.get(video_url, headers=header, params=video_params, timeout=10) video_response.raise_for_status() # 发送请求并下载音频 audio_response = requests.get(audio_url, headers=header, params=audio_params, timeout=10) audio_response.raise_for_status() # 创建输出目录 output_folder = r"C:/Users/zzx/Desktop/video/" if not os.path.exists(output_folder): os.makedirs(output_folder) # 保存视频文件 video_filename = os.path.basename(urlparse(video_url).path) video_file_path = os.path.join(output_folder, video_filename) with open(video_file_path, "wb") as f: for chunk in video_response.iter_content(chunk_size=1024*1024): if chunk: f.write(chunk) print(f"视频文件已下载:{video_file_path}") # 保存音频文件 audio_filename = os.path.basename(urlparse(audio_url).path) audio_file_path = os.path.join(output_folder, audio_filename) with open(audio_file_path, "wb") as f: for chunk in audio_response.iter_content(chunk_size=1024*1024): if chunk: f.write(chunk) print(f"音频文件已下载:{audio_file_path}") # 使用 FFmpeg 合并 output_path = os.path.join(output_folder, "merged_video.mp4") ffmpeg_path = r"C:\Program Files\ffmpeg\bin\ffmpeg.exe" # 确保路径正确 if not os.path.exists(ffmpeg_path): raise FileNotFoundError(f"FFmpeg 未找到,请检查路径:{ffmpeg_path}") ffmpeg_cmd = [ ffmpeg_path, '-i', video_file_path, '-i', audio_file_path, '-c:v', 'copy', '-c:a', 'copy', '-strict', 'experimental', output_path ] try: subprocess.run(ffmpeg_cmd,check=True) print(f"合并完成:{output_path}") except subprocess.CalledProcessError as e: print(f"合并失败:{e}")