B视频下载(测可用)

import re
import requests
import json
from contextlib import closing

print("""
/*********************/
支持分集下载 支持的链接格式如下
https://b23.tv/*
https://www.bilibili.com/video/BV*
https://www.bilibili.com/video/av*
项目地址:https://github.com/5ime/bilidown
/*********************/
""")

cookies = input('''请粘贴你的哔哩哔哩cookiesn''')
cookie = {
'Cookie': cookies
}
header = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
'Referer': 'https://www.bilibili.com'
}
s = requests.session()
my_info = json.loads(s.get('http://api.bilibili.com/x/space/myinfo',cookies=cookie).text)
print("n欢迎你!"+my_info['data']['name'])

url = input("""n请粘贴哔哩哔哩视频链接n""")
if 'https://b23.tv' in url:
loc = s.get(url,allow_redirects=False)
url = loc.headers['location']
if 'video/av' in url:
av = json.loads(s.get('https://api.bilibili.com/x/web-interface/archive/stat?aid='+url,headers=header,cookies=cookie).text)
url = av['data']['bvid']
video_id = re.findall("[w.]*[w:-+%]",url)[3]
vid = json.loads(s.get('https://api.bilibili.com/x/web-interface/view?bvid='+video_id,headers=header,cookies=cookie).text)
video = vid['data']['pages'][0]['cid']
page = 0
if vid['data']['videos'] > 1:
page = int(input("这是一个多P视频,共%d集,请输入要下载第几集(例如:1)并回车:"%vid['data']['videos']))
page -= 1
video = vid['data']['pages'][page]['cid']
video_info = json.loads(s.get('https://api.bilibili.com/x/player/playurl?bvid='+video_id+'&cid='+str(video)+'&qn=80&otype=json',headers=header,cookies=cookie).text)
video_name = vid['data']['title']
video_url = video_info['data']['durl'][0]['url']

print("n视频标题:%sn下载链接:%s"%(video_name,video_url))
print("""
正在自动下载视频中,切勿关闭窗口
如下载失败请自行复制下载链接下载(需设置Referer)
""")

def Download(video_url,video_name,header):
with closing(s.get(video_url,headers=header,stream=True)) as response:
chunk_size = 1024 # 单次请求最大值
content_size = int(response.headers['content-length']) # 内容体总大小
data_count = 0
with open(video_name+'.flv','wb') as file:
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)
data_count = data_count + len(data)
now_jd = (data_count / content_size) * 100
print("r视频下载进度:%d%%(%d/%d)" % (now_jd, data_count, content_size), end=" ")
input('nn下载成功!下载的视频位于本程序同级目录中,按回车退出程序...')

Download(video_url,video_name,header)

<< · Back Index ·>>

发表回复

相关推荐

博士招生丨2021年新疆医科大学第二批博士研究生招生报名中(含招生专业及导师联系方式)

关于新疆医科大学2021年第二批博士研究生招生及报名的通知

· 19秒前

OpTaliX | 鬼像分析

OpTaliX提供最真實準確的鬼像分析。通過分析所有可能的透鏡表面,軟件所提供的全自動搜索功能有助於分析鬼像產生的原因。它包...

· 36秒前

淘寶ab單什麼意思?有什麼用?

在淘寶上開店,不僅僅需要將店鋪的產品選好,更是需要有一定的運營方法,有時候會需要進行刷單來提高店鋪流量,而其中有一種...

· 59秒前

“孔乙己”是什么意思?

我们都学过鲁迅先生写的孔乙己,小时候总觉得孔乙己只不过是普通的一个名字而已,跟张三李四没什么区别,长大之后,总觉得这 ...

· 1分钟前

婚嫁百科丨本命年能结婚吗

本命年能结婚吗?这是不少朋友的疑问,新人结婚一般都会挑选一个良辰节日,为的就是讨一个好的彩头,而关于本命年能否结婚这 ...

· 2分钟前