文件pro

import requests
import json
import re
from bs4 import BeautifulSoup
from qiniu import Auth, put_data


class BilibiliVideoAudio:
def __init__(self, bid):
self.bid = bid
self.headers = {
"referer": "https://www.bilibili.com",
"origin": "https://www.bilibili.com",
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
'Accept-Encoding': 'identity'
}

def get_video_audio(self):
url = f'https://www.bilibili.com/video/{self.bid}?vd_source=6659c978e0a0ff11c82fae0ae309aabe'
content = requests.get(url, headers=self.headers).content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')

meta_tag = soup.head.find('meta', attrs={'name': 'title'})
title = meta_tag['content']

pattern = r'window\.__playinfo__=({.*?})\s*</script>'
json_data = re.findall(pattern, content)[0]
data = json.loads(json_data)

video_url = data['data']['dash']['video'][0]['base_url']
audio_url = data['data']['dash']['audio'][0]['base_url']

return {
'title': title,
'video_url': video_url,
'audio_url': audio_url
}


def upload_to_qiniu(access_key, secret_key, bucket_name, data, key=None):
q = Auth(access_key, secret_key)
token = q.upload_token(bucket_name, key, 3600)
ret, info = put_data(token, key, data)
if info.status_code == 200:
print("文件上传成功!")
else:
print("文件上传失败:", info.error)


def main():
bids = ["BV1bL4y1E71a"]
for bid in bids:
bilibili = BilibiliVideoAudio(bid)
video_audio_info = bilibili.get_video_audio()

title = video_audio_info['title']
video_url = video_audio_info['video_url']
audio_url = video_audio_info['audio_url']

# 下载视频和音频内容
video_data = requests.get(video_url, headers=bilibili.headers).content
audio_data = requests.get(audio_url, headers=bilibili.headers).content

# 上传视频和音频内容到七牛云
upload_to_qiniu(access_key='lObvgTkNUTdmLkeRH-fSuc3jeHEfdAgtxXzzvIbW',
secret_key='YjnzJuCH_6-qWb8aQ5nGTIqsVDFywRN_tgdrkOF_',
bucket_name='shanjupayss',
data=video_data,
key=f"{title}.mp4")
upload_to_qiniu(access_key='lObvgTkNUTdmLkeRH-fSuc3jeHEfdAgtxXzzvIbW',
secret_key='YjnzJuCH_6-qWb8aQ5nGTIqsVDFywRN_tgdrkOF_',
bucket_name='shanjupayss',
data=audio_data,
key=f"{title}.mp3")


if __name__ == "__main__":
main()
posted @   langpo  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示