一招带你掌握B站所有视频,Python小脚本下载你最喜欢的神仙视频,想下载什么就下载什么

一招带你掌握B站所有视频,Python小脚本下载你最喜欢的神仙视频,想下载什么就下载什么,第1张

概述大家是不是一有时间就会掏出手机逛B站或者抖音,尤其是那些有小姐姐的舞蹈区,今天就专门写个练手的脚本下载B站的舞蹈视频,对这感兴趣的小伙伴们可以去试试练手,掌握方法之后,想下载其他区的,比如:动画、音乐、时尚、鬼畜等视频都可以的,想下载什么就下载什么。一、抓取列表首先

大家是不是一有时间就会掏出手机逛B站或者抖音,尤其是那些有小姐姐的舞蹈区,今天就专门写个练手的脚本来下载B站的舞蹈视频,对这感兴趣的小伙伴们可以去试试练手,掌握方法之后,想下载其他区的,比如:动画、音乐、时尚、鬼畜等视频都可以的,想下载什么就下载什么。

一、抓取列表

首先点开舞蹈区先选择宅舞列表。

然后打开 F12 的控制面板,可以找到一条 https://API.bilibili.com/x/web-interface/newList?rID=20&type=0&pn=1&ps=20&Jsonp=Jsonp&callback=JsonCallback_bili_57905715749828263 的 url,其中 rID 是 B 站的小分类,pn 是页数。

小编试着在浏览器将地址打开居然报了 404,可是在控制面板中这个地址的返回值明明就是视频列表。试着去掉 callback 的参数,意外的得到了想要的结果。

众所周知 bID 是一个 B 站视频的唯一 ID,想要获取 bID 可以从上面 url 的返回值中提取 aID,然后将 aID 转换为 bID。

Str = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'  # 准备的一串指定字符串Dict = {}  # 将字符串的每一个字符放入字典一一对应 , 如 f对应0 Z对应1 一次类推。for i in range(58):    Dict[Str[i]] = i  s = [11, 10, 3, 8, 4, 6, 2, 9, 5, 7]  # 必要的解密列表xor = 177451812 add = 100618342136696320  # 这串数字最后要被减去或加上  def algorithm_enc(av):    ret = av    av = int(av)    av = (av ^ xor) + add    # 将BV号的格式(BV + 10个字符) 转化成列表方便后面的 *** 作    r = List('BV          ')    for i in range(10):        r[s[i]] = Str[av // 58 ** i % 58]    return ''.join(r)    def find_bID(p):    bIDs = []    r = requests.get(            'https://API.bilibili.com/x/web-interface/newList?&rID=20&type=0&pn={}&ps=50&Jsonp=Jsonp'.format(p))           data = Json.loads(r.text)    archives = data['data']['archives']      for item in archives:        aID = item['aID']        bID = algorithm_enc(aID)        bIDs.append(bID)      return bIDs
二、获取视频的 CID

想要下载 1080 的视频,光有 bID 是不够的,还需要 登录后 cookie 中的 SESSDATA 值和 cID 。
首先登录 B 站将 cookie 中的 SESSDATA 复制到对象头中。用地址为 https://API.bilibili.com/x/player/Pagelist?bvID= url 返回 cID。

def get_cID(bID):    url = 'https://API.bilibili.com/x/player/Pagelist?bvID=' + bID      headers = {        'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (K@R_301_6832@, like Gecko) Chrome/90.0.4430.212 Safari/537.36',        'cookie': 'SESSDATA=182cd036%2C1636985829%2C3b393%2A51',        'Host': 'API.bilibili.com'    }      @R_301_6832@ = requests.get(url, headers=headers).Json()      infos = []      data = @R_301_6832@['data']    cID_List = data    for item in cID_List:        cID = item['cID']        Title = item['part']        infos.append({'bID': bID, 'cID': cID, 'Title': Title})    return infos
三、下载视频

下载视频的 https://API.bilibili.com/x/player/playurl 来自于每次视频播放完之后的推荐列表。

最后使用 urllib.request.urlretrIEve 函数下载视频。

```pythondef get_vIDeo_List(aID, cID, quality):    url_API = 'https://API.bilibili.com/x/player/playurl?cID={}&bvID={}&qn={}'.format(cID, aID, quality)    headers = {        'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (K@R_301_6832@, like Gecko) Chrome/90.0.4430.212 Safari/537.36',        'cookie': 'SESSDATA=182cd036%2C1636985829%2C3b393%2A51',        'Host': 'API.bilibili.com'    }    @R_301_6832@ = requests.get(url_API, headers=headers).Json()    vIDeo_List = []      for i in @R_301_6832@['data']['durl']:        vIDeo_List.append(i['url'])    return vIDeo_List  def schedule_cmd(blocknum, blocksize, totalsize):    percent = 100.0 * blocknum * blocksize/ totalsize    s = ('#' * round(percent)).ljust(100, '-')    sys.stdout.write('%.2f%%' % percent + '[' + s + ']' + '\r')    sys.stdout.flush()  def download(vIDeo_List, Title, bID):    for i in vIDeo_List:        opener = urllib.request.build_opener()        opener.addheaders = [            ('User-Agent', 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (K@R_301_6832@, like Gecko) Chrome/90.0.4430.212 Safari/537.36'),            ('Accept', '*/*'),            ('Accept-Language', 'en-US,en;q=0.5'),            ('Accept-EnCoding', 'gzip, deflate, br'),             ('Range', 'bytes=0-'),              ('Referer', 'https://www.bilibili.com/vIDeo/'+bID),            ('Origin', 'https://www.bilibili.com'),            ('Connection', 'keep-alive'),          ]          filename=os.path.join('D:\\vIDeo', r'{}_{}.mp4'.format(bID,Title))           try:            urllib.request.install_opener(opener)            urllib.request.urlretrIEve(url=i, filename=filename, reporthook=schedule_cmd)         except:            print(bID + "下载异常,文件:" + filename)

感谢认真观看我文章的你们,下面是纯分享给你们的,礼尚往来,更多Python精彩内容可以看小编主页。

直接点击领取 总结

以上是内存溢出为你收集整理的一招带你掌握B站所有视频,Python小脚本下载你最喜欢的神仙视频,想下载什么就下载什么全部内容,希望文章能够帮你解决一招带你掌握B站所有视频,Python小脚本下载你最喜欢的神仙视频,想下载什么就下载什么所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1183588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存