
def get_bilibili_video_links(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"Referer": "https://www.bilibili.com/online.html",
"Cookie": "buvid3=16B085E9-2336-D995-673F-B42F2F400FD137684infoc; b_nut=1690525437; _uuid=E44D17B4-67106-6B6C-3DD9-83E10C922735337558infoc; buvid_fp=a890e9cc95b0def2ca53d68e00d41bda; buvid4=E7CC7306-FA67-96D8-67BF-60D48D34392273951-023071214-RYZwLL8nRmXHGZtmr2QQ0Q%3D%3D; FEED_LIVE_VERSION=V8; header_theme_version=CLOSE; home_feed_column=5; browser_resolution=1493-751; CURRENT_FNVAL=4048; PVID=1; SESSDATA=956d8791%2C1708227771%2Cba8e4%2A8106NzQJ1UlfU9H7Yijf9qq27GtQLlpGUOEEf0pXCzHhGXr-KtG1x7rbYUWwRD8rIRpq8wkQAADQA; bili_jct=27f713f3596b44aa56609e7eef354704; DedeUserID=232442913; DedeUserID__ckMd5=7774e129371f2995; rpdid=|(J|~uullY)m0J'uYmu|Rm|mk; i-wanna-go-back=-1; b_ut=5; CURRENT_QUALITY=64; bp_video_offset_232442913=830044288713752627; is-2022-channel=1; fingerprint=a890e9cc95b0def2ca53d68e00d41bda; buvid_fp_plain=undefined; innersign=0; b_lsid=62FFC769_18A1B5684A0; bsource=search_bing; sid=npsnfjih" }
data=requests.get(url,headers=headers)
data.encoding='utf-8'
data=data.text
with open("bili.html","w",encoding='utf-8') as f:
f.write(data)
html=etree.HTML(data)
n=1
list=[]
while True:
try:
path=f"/html/body/div[2]/div/main/div/div[2]/div/div[2]/div[{n}]/div[2]/div/div/h3/a/@href"
url_list=html.xpath(path)[0].strip("//")[0:]
url=f"https://{url_list}"
list.append(url)
print(url)
n+=1
except:
print("没有更多视频了")
break
print(list)
return list
# @app.route('/bili',methods=['GET','POST'])
def video_audio():
url='https://www.bilibili.com/v/kichiku/?spm_id_from=333.1073.0.0'
# url=request.args.get('url','')
for i in get_bilibili_video_links(url):
data=requests.get(i).text
html= etree.HTML(data)
title=html.xpath('/html/body/div[2]/div[2]/div[1]/div[1]/h1/@title')[0]
print(title)
# print(html)
js=html.xpath('/html/head/script[3]')[0].text.split("window.__playinfo__=")[1]
print(js)
js=json.loads(js)
print(js)
video_url=js['data']['dash']['video'][0]['baseUrl']
audio_url=js['data']['dash']['audio'][0]['baseUrl']
print(video_url)
print(audio_url)
#合并音视频
with open(f"{title}.mp4","wb") as f:
f.write(requests.get(video_url).content)
with open(f"{title}.mp3","wb") as f:
f.write(requests.get(audio_url).content)
print("下载完成")
try:
video = VideoFileClip(f'{title}.mp4')
print(video.size)
print(video.duration)
audio = AudioFileClip(f'{title}.mp3')
video.set_audio(audio) #将音频写入到视频
video.write_videofile(f'./images/{title}_1.mp4') #保存新的视频
time.sleep(1)
# os.remove(f'{title}.mp3')
# os.remove(f'{title}.mp4')
print("合并完成")
print("下载完成")
except Exception as e:
print(e)
print("合并失败")
# os.remove(f'{title}.mp3')
# os.remove(f'{title}.mp4')
pass