????
??????????????????????????????????????Web????bilibili??????????????????????????????????????????????Python????????b????????????????????????????????????????????????
??????????https://www.bilibili.com/video/BV1Fy4y1D7XS
??????b?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ffmpeg ????????????????????????????????????????????????????????????????????????????????
ffmpeg??????????????????????????????????bin????????????????Python??????????????????
requests??re??json??subprocess??os
????????
??????url????????????????????headers????????????????????????????
????????????F12??????????????????????????????????????????????????????????????
??????????????????head??????????script ????????????????????????????
????????????????????403??????????????????????
??????????????????Request Headers ??????????????referer??????????????????????????????referer????????????????????????????bp????
Forward??????????????????????
????????????????????????????????
????????
????requests????????????????????????????????header??referer??????????????????????????????????????????????????????????????????Response??????????????????????????
??????????
import requestsheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36","referer": "https://message.bilibili.com/"}def send_request(url):    response = requests.get(url=url, headers=headers) #????get??????????????    return responsehtml_data = send_request("https://www.bilibili.com/video/BV1Qy4y147H1").textprint(html_data)??????????
????????
????????????????HTML??json????????????????????????????????????????????????
title??????????????????head????
????????????????????????????
title = re.findall('<title data-vue-meta="true">(.*?)</title>',html_data)[0].replace("_???????? (?b-?b)???? ????~-bilibili",""????????????????json????????
??????????????????????????????????????????????
json_data = re.findall(r'<script>window.__playinfo__=(.*?)</script>',html_data)[0]    json_data = json.loads(json_data) #???? JSON ?????????? Python ????????????????    audio_url = json_data["data"]["dash"]["audio"][0]["backupUrl"][0]    video_url = json_data["data"]["dash"]["video"][0]["backupUrl"][0]??????????
import requestsimport reimport jsonimport pprintheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36","referer": "https://message.bilibili.com/"}def send_request(url):    response = requests.get(url=url, headers=headers)    return responsedef get_video_data(html_data):    title = re.findall('<title data-vue-meta="true">(.*?)</title>',html_data)[0].replace("_???????? (?b-?b)???? ????~-bilibili","")    json_data = re.findall(r'<script>window.__playinfo__=(.*?)</script>',html_data)[0]    json_data = json.loads(json_data)    #pprint.pprint(json_data)    audio_url = json_data["data"]["dash"]["audio"][0]["backupUrl"][0]    video_url = json_data["data"]["dash"]["video"][0]["backupUrl"][0]    video_data = [title, audio_url, video_url]    return video_datahtml_data = send_request("https://www.bilibili.com/video/BV1Qy4y147H1").textvideo_data = get_video_data(html_data)for item in video_data:    print(item)??????????
????????
????????????????????????????????????????
??????????
import requestsimport reimport jsonheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36","referer": "https://message.bilibili.com/"}def send_request(url):    response = requests.get(url=url, headers=headers)    return responsedef get_video_data(html_data):    title = re.findall('<title data-vue-meta="true">(.*?)</title>',html_data)[0].replace("_???????? (?b-?b)???? ????~-bilibili","")    json_data = re.findall(r'<script>window.__playinfo__=(.*?)</script>',html_data)[0]    json_data = json.loads(json_data)    audio_url = json_data["data"]["dash"]["audio"][0]["backupUrl"][0]    video_url = json_data["data"]["dash"]["video"][0]["backupUrl"][0]    video_data = [title, audio_url, video_url]    return video_datadef save_data(file_name,audio_url,video_url):    print("???????? " + file_name + "??????...")    audio_data = send_request(audio_url).content    print("???????? " + file_name + "????????")    print("???????? " + file_name + "??????...")    video_data = send_request(video_url).content    print("???????? " + file_name + "????????")    with open(file_name + ".mp3", "wb") as f:        f.write(audio_data)    with open(file_name + ".mp4", "wb") as f:        f.write(video_data)html_data = send_request("https://www.bilibili.com/video/BV1Qy4y147H1").textvideo_data = get_video_data(html_data)save_data(video_data[0],video_data[1],video_data[2])??????????
??????????
??????????????????????????????????????????????????????????????????????????????ffmpeg????????????????????????????????????????????????????????????????????1.mp3??1.mp4??????????????????????????????????????)
??????????
import requestsimport reimport jsonimport subprocessimport osheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36","referer": "https://message.bilibili.com/"}def send_request(url):    response = requests.get(url=url, headers=headers)    return responsedef get_video_data(html_data):    title = re.findall('<title data-vue-meta="true">(.*?)</title>',html_data)[0].replace("_???????? (?b-?b)???? ????~-bilibili","")    json_data = re.findall(r'<script>window.__playinfo__=(.*?)</script>',html_data)[0]    json_data = json.loads(json_data)    audio_url = json_data["data"]["dash"]["audio"][0]["backupUrl"][0]    video_url = json_data["data"]["dash"]["video"][0]["backupUrl"][0]    video_data = [title, audio_url, video_url]    return video_datadef save_data(file_name,audio_url,video_url):    print("???????? " + file_name + "??????...")    audio_data = send_request(audio_url).content    print("???????? " + file_name + "????????")    print("???????? " + file_name + "??????...")    video_data = send_request(video_url).content    print("???????? " + file_name + "????????")    with open(file_name + ".mp3", "wb") as f:        f.write(audio_data)    with open(file_name + ".mp4", "wb") as f:        f.write(video_data)def merge_data(video_name):    os.rename(video_name + ".mp3","1.mp3")    os.rename(video_name + ".mp4","1.mp4")    print("???????? " + video_name + "??????...")    subprocess.call("ffmpeg -i 1.mp4 -i 1.mp3 -c:v copy -c:a aac -strict experimental output.mp4", shell=True)    os.rename("output.mp4", video_name + ".mp4")    os.remove("1.mp3")    os.remove("1.mp4")    print("???????? " + video_name + "????????")html_data = send_request("https://www.bilibili.com/video/BV1Qy4y147H1").textvideo_data = get_video_data(html_data)save_data(video_data[0],video_data[1],video_data[2])merge_data(video_data[0])??????????
??????????????????????????????
????????
# -*- coding : utf-8 -*-# home.php?mod=space&uid=238618 : 2021/3/21 16:11# home.php?mod=space&uid=686208 : wawyw# home.php?mod=space&uid=267492 : bilibili_video.py# home.php?mod=space&uid=371834 : PyCharmimport requestsimport reimport jsonimport subprocessimport osheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36","referer": "https://message.bilibili.com/"}def send_request(url):    response = requests.get(url=url, headers=headers)    return responsedef get_video_data(html_data):    title = re.findall('<title data-vue-meta="true">(.*?)</title>',html_data)[0].replace("_???????? (?b-?b)???? ????~-bilibili","")    json_data = re.findall(r'<script>window.__playinfo__=(.*?)</script>',html_data)[0]    json_data = json.loads(json_data)    audio_url = json_data["data"]["dash"]["audio"][0]["backupUrl"][0]    video_url = json_data["data"]["dash"]["video"][0]["backupUrl"][0]    video_data = [title, audio_url, video_url]    return video_datadef save_data(file_name,audio_url,video_url):    print("???????? " + file_name + "??????...")    audio_data = send_request(audio_url).content    print("???????? " + file_name + "????????")    print("???????? " + file_name + "??????...")    video_data = send_request(video_url).content    print("???????? " + file_name + "????????")    with open(file_name + ".mp3", "wb") as f:        f.write(audio_data)    with open(file_name + ".mp4", "wb") as f:        f.write(video_data)def merge_data(video_name):    os.rename(video_name + ".mp3","1.mp3")    os.rename(video_name + ".mp4","1.mp4")    print("???????? " + video_name + "??????...")    subprocess.call("ffmpeg -i 1.mp4 -i 1.mp3 -c:v copy -c:a aac -strict experimental output.mp4", shell=True)    os.rename("output.mp4", video_name + ".mp4")    os.remove("1.mp3")    os.remove("1.mp4")    print("???????? " + video_name + "????????")def main():    url = input("????bilibili????????????????????????")    html_data = send_request(url).text    video_data = get_video_data(html_data)    save_data(video_data[0],video_data[1],video_data[2])    merge_data(video_data[0])if __name__ == "__main__":    main()??????
??????????????????????????????B??UP????????????????????????????????????????????????????????????????~
??????exe
????????????????Pyinstaller????????cmd????pip????
pip install pyinstaller  
                         
                        
















