吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 3685|回复: 23
收起左侧

[Python] 【python】bilibili视频下载器

[复制链接]
未晴雾香 发表于 2022-1-14 16:43
本帖最后由 未晴雾香 于 2022-1-14 16:45 编辑

BiBiDownload

download bilibili video

更改cookie

20220114162933
20220114162954

获取视频数据

20220114162129

打印视频数据

20220114162250

下载视频

直接回车即为默认
20220114162336

20220114162444

画质调整

1080P和以上需要登录,1080p60+需要大会员

修改qn值:

"高清 1080P60"---116,

"高清 1080P"-----80,

"高清 720P"------64,

"清晰 480P"------32,

"流畅 360P"------16

20220114163054



[Python] 纯文本查看 复制代码
import requests
import json
import pprint
import re
from tqdm import tqdm
import time
import os


session = requests.session()
ico={}
videoInfos=[]

#cookie登录账号
def cookieLogin():
    url="http://api.bilibili.com/x/space/myinfo"
    headers={
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55",
        "cookie":"SESSDATA=更改此处"
    }
    
    res=session.get(url=url,headers=headers).text
    myJSON=json.loads(res)
    userName=myJSON["data"]["name"]
    vipStatus=myJSON["data"]["vip"]["status"]
    if vipStatus==0:
        vipStatus="非会员"
    else:
        vipStatus="大会员"
    #pprint.pprint(myJSON)
    print("您的账号名:"+userName+",当前为:"+vipStatus)

#获取视频数据
def getVideDate(bv):
    url="https://api.bilibili.com/x/web-interface/view?bvid="+bv
    headers={
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55",
        "cookie":"SESSDATA=更改此处"
    }
    viderJSON=json.loads(session.get(url=url,headers=headers).text)
    ico["video"]=viderJSON["data"]["pic"]
    ico["up"]=viderJSON["data"]["owner"]["face"]

    video=viderJSON["data"]["pages"]
    print("正在获取视频数据\n视频标题:"+viderJSON["data"]["title"])

    for i in tqdm(range(len(video))):
        url="http://api.bilibili.com/x/player/playurl?cid={cid}&bvid={bv}&qn={qn}".format(cid=video[i]["cid"],bv=bv,qn=80)
        res=session.get(url=url,headers=headers).text
        res=json.loads(res)

        videoInfo={}
        videoInfo["url"]=res["data"]["durl"][0]["url"]
        videoInfo["title"]=video[i]["part"]
       
        if res["data"]["quality"]==116:
            videoInfo["quality"]="高清 1080P60"
        elif res["data"]["quality"]==80:
            videoInfo["quality"]="高清 1080P"
        elif  res["data"]["quality"]==64:
            videoInfo["quality"]="高清 720P"
        elif  res["data"]["quality"]==32:
            videoInfo["quality"]="清晰 480P"
        elif  res["data"]["quality"]==16:
            videoInfo["quality"]="流畅 360P"     
        global videoInfos
        videoInfos.append(videoInfo)  
        #print(i,url,video[i]["part"])
        #print(i,videoInfo) 
        time.sleep(0.2)
    #pprint.pprint(videoInfos)
    print("视频数据获取完成\n")

#打印视频数据
def printVideoDate():
    if videoInfos==[]:
        print("未找到视频数据,请先获取视频数据!")
        return
    for i in range(len(videoInfos)):
        video=videoInfos[i]
        print(str(i+1)+":"+video["title"]+" "+video["quality"])

#下载视频
def downVideo(dir,num):
    # 文件夹不存在,则创建文件夹
    folder = os.path.exists(dir)
    #print(os.getcwd())
    if not folder:
        os.makedirs(dir)

    url=videoInfos[num]["url"]
    videoName=videoInfos[num]["title"]+" "+videoInfos[num]["quality"]
    headers={
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55",
        "referer":"https://www.bilibili.com"
    }
    res=session.get(url=url,headers=headers,stream=True)
    total_size = int(int(res.headers["Content-Length"])/1024+0.5)

    with open(dir+videoName+".flv","wb") as f:
        print('开始下载文件:{},当前文件大小:{}KB'.format(videoName,total_size))
        for chunk in tqdm(res.iter_content(1024),total=total_size,unit='k',desc='Downloading'):
            f.write(chunk)
    print(videoName,"下载完毕")

def showMenu():
    print("0: 显示菜单\n1: 获取视频数据\n2: 打印视频数据\n3: 下载视频\n-1: 退出程序")



if __name__=="__main__":
    cookieLogin()
    print()
    showMenu()
#    bv="BV1eT4y1Z7T7"

    while(True):
        i=input("请输入功能菜单编号:")
        if i=='-1':
            break;
        elif i=='0':
            showMenu() 
        elif i=='1':
            bv=input("请输入BV号:")
            getVideDate(bv) 
            printVideoDate()
        elif i=='2':
            printVideoDate()
        elif i=='3':
            num=input("请输入要下载的编号(多个视频写成数组形式,例如:[1,2,3]),默认为下载所有视频:")
            dir=input("请输入保存路径,默认为./download/:")
            if dir=='':
                dir="./download/"
            if(num==''):
                print("预下载视频"+str(len(videoInfos))+'个')
                for i in range(len(videoInfos)):
                    downVideo(dir=dir,num=i)
            elif(isinstance(eval(num),int)):
                downVideo(dir=dir,num=int(num)-1)
            elif(isinstance(eval(num),list)):
                print("预下载视频"+str(len(eval(num)))+'个')
                for i in eval(num):
                    downVideo(dir=dir,num=i-1)
        elif i=='':
            pass

    print("退出成功")


GitHub项目地址:https://github.com/LnYo-Cly/BiBiDownload

免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
day1401488752 + 1 + 1 我很赞同!
小姐姐的男朋友 + 1 + 1 谢谢@Thanks!
haiyangnanzi + 1 + 1 谢谢@Thanks!
yjn866y + 1 + 1 我很赞同!
Cmzlwc + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

chen180 发表于 2022-1-24 15:26
顶一下,改了点东西,就是在文件名前加了 P 代表影片排序,否则下下来有可能是乱序的
[Python] 纯文本查看 复制代码
 # 如果一个影片中有多个P,就带上P,其实1个话,也带上了。
        videoInfo["title"] = 'P' + str(video[i]["page"]) + ' ' + video[i]["part"]
9yingle 发表于 2022-1-14 17:10
TsShark 发表于 2022-1-14 19:30
yjn866y 发表于 2022-1-14 20:08
来了学习下
haiyangnanzi 发表于 2022-1-14 20:08
希望楼主弄个成品给小白们
ciker_li 发表于 2022-1-14 20:09
感谢分享,学习学习
一路有你 发表于 2022-1-14 20:11
谁有好用的微信视频提取
小姐姐的男朋友 发表于 2022-1-15 21:34
谢谢楼主的分享,要是楼主搞个多线程下载就好了,现在平均下载速度就1M/s,还是有点慢的
 楼主| 未晴雾香 发表于 2022-1-16 15:33
小姐姐的男朋友 发表于 2022-1-15 21:34
谢谢楼主的分享,要是楼主搞个多线程下载就好了,现在平均下载速度就1M/s,还是有点慢的

hh,目前还不会写python的多线程
Ron2011 发表于 2022-1-18 11:00
本帖最后由 Ron2011 于 2022-1-18 11:08 编辑

学习了,非常感谢,问个小白问题,问什么我运行报错?


  File "zmq/backend/cython/checkrc.pxd", line 19, in zmq.backend.cython.checkrc._check_rc

Again: Resource temporarily unavailable
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2022-5-16 14:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表