首页 > 编程语言 >python获取问津

python获取问津

时间:2024-05-12 13:19:32浏览次数:11  
标签:python 问津 获取 video url key download path audio

import os
import requests
import json
import re
from bs4 import BeautifulSoup
from qiniu import Auth, put_file


class BilibiliVideoAudio:
def __init__(self, bid, download_path='download'):
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'
}
self.download_path = download_path

# 创建下载路径
if not os.path.exists(download_path):
os.makedirs(download_path)

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 download_video_audio(self, url, filename):
# 对文件名进行清理,去除不合规字符
filename = self.sanitize_filename(filename)
try:
# 发送请求下载视频或音频文件
resp = requests.get(url, headers=self.headers).content
download_path = os.path.join(self.download_path, filename)
with open(download_path, mode='wb') as file:
file.write(resp)
print("{:*^30}".format(f"下载完成:{filename}"))

return download_path # 返回下载文件的本地路径
except Exception as e:
print(e)

def sanitize_filename(self, filename):
# 定义不合规字符的正则表达式
invalid_chars_regex = r'[\"*<>?\\|/:,]'

# 替换不合规字符为空格
sanitized_filename = re.sub(invalid_chars_regex, ' ', filename)

return sanitized_filename


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


def main():
bids = ["BV1bL4y1E71a"] # 视频的bid,可以修改为其他视频的bid
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_path = bilibili.download_video_audio(video_url, f"{title}.mp4") # 下载视频
audio_path = bilibili.download_video_audio(audio_url, f"{title}.mp3") # 下载音频

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


if __name__ == "__main__":
main()

标签:python,问津,获取,video,url,key,download,path,audio
From: https://www.cnblogs.com/zyb-luckey/p/18187709

相关文章

  • 【攻防技术系列】-- Python沙箱逃逸
    Python是一种强大而灵活的编程语言,但在某些情况下,可能需要运行不受信任的代码,同时又希望限制它的行为,以防止对系统的不良影响。这时,Python沙箱就成为一种有用的工具,它可以帮助你在安全的环境中运行不受信任的代码。本文将探讨Python沙箱的概念、常见的沙箱技术以及如何避免沙......
  • Playwright安装与Python集成:探索跨浏览器测试的奇妙世界
    前言web自动化测试是我们工作中的重要一环,随着Web应用程序和网站的复杂性不断增加,跨浏览器测试变得越来越必要。而Playwright作为一种新兴的跨浏览器测试工具,为开发人员提供了一种轻松愉快的方式来进行自动化测试。本文将带您深入探索Playwright的安装过程,并结合Python语言,揭示......
  • 神器!使用Python 轻松识别验证码
    前言在我们进行自动化测试的过程中,免不了要在登录时遇到验证码,很多时候我们都是只能找开发要万能验证码或者暂时关闭验证码这个功能,但是有时候我们必须要验证码是否能够正常生成,所以在这个时候,我们需要做的就是输入验证码,但是验证码这个东西是随机生成的,不是每一次都一样,所以我......
  • Python 潮流周刊#50:我最喜欢的 Python 3.13 新特性!
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。本期分享了12篇文章,11个开源项目,2则音视频,赠书5本《黑客与画家(10万册纪......
  • C语言实现获取BMP文件信息
    通过命令行传递文件路径参数,输出BMP的width、height、size1、从BMP的结构信息可知,文件大小、图片宽度、图片高度均占据4个字节,所以只需要打开文件读取对应位置的信息并打印即可。2、为了提高可移植性,可以定义结构体,保持和BMP文件结构一致,这样可以一次性读取保存,方便后续调用。但......
  • 数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGB
    全文链接:https://tecdat.cn/?p=34434原文出处:拓端数据部落公众号分析师:ShilinChen离职率是企业保留人才能力的体现。分析预测职员是否有离职趋向有利于企业的人才管理,提升组织职员的心理健康,从而更有利于企业未来的发展。解决方案任务/目标采用分类这一方法构建6种模型对职......
  • 使用Python根据网页生成RSS
    pipinstallrequestsbeautifulsoup4lxmlimportrequestsfrombs4importBeautifulSoupimportxml.etree.ElementTreeasETdeffetch_news_from_url(url):#1.网页抓取response=requests.get(url)response.raise_for_status()......
  • python 换源命令
    #换阿里云的源$pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple$pipconfigsetinstall.trusted-hostmirrors.aliyun.com#换清华大学的源$pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/simple$pipconfigsetinstall......
  • 牛客小白月赛93(python)
    A生不逢71defcheck(num):2return'7'instr(num)ornum%7==034defsolve():5n,a,k=LII()6d=a+17foriinrange(k):8ifcheck(d):9print('p',end='')10els......
  • 获取lcd设备分辨率 色深
    /********************************************************************* filename: get_dev_info.c* author :lzj* date :2024/05/11* function:获取lcd设备分辨率*色深* note :None** CopyRight(c)[email protected]......