# @Author : @Cloudmistery """ tips:错误记录 1.headers请求头设置错误导致文件不可读(就是错了) 2.文件名合法化,不合法的文件名直接创建不了 3.音频和视频需要分开爬取及合成 """ import requests import re import json from moviepy.editor import * import html as h import os # TODO:及时更新url和cookie # 设置 请求url 手动创建文件夹 url = 'https://www.bilibili.com/video/BV17bxKeBEpo?spm_id_from=333.788.recommend_more_video.2&vd_source=f6247aa12dae1ff1bce74ef0af381757' A_path = 'Audio/' V_path = 'Video/' # Synth_path = 'File/美少女/' # Synth_path = 'File/电吉他/' Synth_path = 'Files/' # 需要完整url headers = { 'Referer': url, 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0", 'cookie': "buvid3=94F0FDAB-59F7-39B1-F805-CAA3E07060F661671infoc; b_nut=1729338061; _uuid=96637C82-967A-B8CA-D643-7621093B83AF862008infoc; buvid4=6F50A1B3-D6A1-87A5-1EF3-7AA396E5E35C62385-024101911-WqlszYIbsE%2BQ%2FFD68EQkXA%3D%3D; enable_web_push=DISABLE; LIVE_BUVID=AUTO8117293380854336; header_theme_version=CLOSE; rpdid=|(Y|RJYumR|0J'u~kmJJmJ)u; buvid_fp_plain=undefined; hit-dyn-v2=1; is-2022-channel=1; PVID=1; DedeUserID=35990046; DedeUserID__ckMd5=bf34a8eab39f0c11; blackside_state=1; CURRENT_BLACKGAP=1; enable_feed_channel=ENABLE; _tea_utm_cache_20001731={%22creative_id%22:271609082}; fingerprint=d36c01c87471ab70718bc472c27c52a6; buvid_fp=d36c01c87471ab70718bc472c27c52a6; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NDU3MzE0OTUsImlhdCI6MTc0NTQ3MjIzNSwicGx0IjotMX0.mKHJFSP71sE3SetILNeShNBopd-nFD8IBLn7DRY40GY; bili_ticket_expires=1745731435; SESSDATA=af67ee36%2C1761024297%2C05147%2A41CjCFXD8lfOe6Y2Wytxly3_3CZxgGO8Wxuw2wiuxq6b-u0e6YmP-Bj-vplF3JFdZSKI8SVlBtQmNFQ3BNRmJCSzR4R0labVhZVzdTMEpucGtPSklVdlROWkpTWHp1OHBKRlQ5M2cyQ1gzMzdmZ2EwSUZxRFFKRUF2RUFZWXZBanY5Q0FSQS10M0lBIIEC; bili_jct=9ebb01c20099662180c2ec6a8ce2d34f; CURRENT_QUALITY=116; b_lsid=211010F35B_1966BEE3984; bmg_af_switch=1; bmg_src_def_domain=i1.hdslb.com; sid=892zno53; home_feed_column=4; browser_resolution=1281-754; bp_t_offset_35990046=1059705780682358784; CURRENT_FNVAL=4048" } # 主程序 # 发送请求 response = requests.get(url=url, headers=headers,timeout=(3,7)) html = response.text # 提取,合法化字符并显示 视频标题 title = re.findall('title="(.*?)"', html)[0] title = h.unescape(title) title = title # 合法化标题 if title: illegal_chars = fr'<||>\/:"*?' def remove_illegal_chars(title_ill): for char in illegal_chars: title_ill = title_ill.replace(char, " ") return title_ill title = remove_illegal_chars(title) print("视频标题:",title) # 提取视频信息,提取音视频链接 # TODO:设置数值来声明文件品质,0默认最高 info = re.findall('window.__playinfo__=(.*?)', html)[0] json_data = json.loads(info) video_url = json_data['data']['dash']['video'][0]['baseUrl'] audio_url = json_data['data']['dash']['audio'][0]['baseUrl'] # 获取音视频内容并保存 video_content = requests.get(url=video_url, headers=headers).content audio_content = requests.get(url=audio_url, headers=headers).content def SaveAudio(): with open(A_path + title + '.mp3', mode='wb') as a: a.write(audio_content) def SaveVideo(): with open(V_path + title + '.mp4', mode='wb') as v: v.write(video_content) def ClipVideo(): time_1 = 0 time_2 = None audio_path = fr"{A_path}{title}{'.mp3'}" video_path = fr"{V_path}{title}{'.mp4'}" audio = AudioFileClip(audio_path) audio_clip = audio.subclip(time_1, time_2) video = VideoFileClip(video_path) video_clip = video.subclip(time_1, time_2) audio_clip = audio_clip.set_duration(video_clip.duration) video_clip_with_audio = video_clip.set_audio(audio_clip) video_clip_with_audio.write_videofile(fr"{Synth_path}{title}{'.mp4'}", codec="libx264", audio_codec="aac") try: os.path.exists(video_path) os.remove(video_path) print(f'文件 {video_path} 已被删除') except: print(f'无 {video_path} 此文件') def main(): SaveAudio() SaveVideo() ClipVideo() if __name__ == '__main__': main()