gpt4 book ai didi

写一个Python脚本下载哔哩哔哩舞蹈区的所有视频

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章写一个Python脚本下载哔哩哔哩舞蹈区的所有视频由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、抓取列表

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

写一个Python脚本下载哔哩哔哩舞蹈区的所有视频

然后打开 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 是页数.

写一个Python脚本下载哔哩哔哩舞蹈区的所有视频

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

写一个Python脚本下载哔哩哔哩舞蹈区的所有视频

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Str  =  'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'   # 准备的一串指定字符串
Dict  =  {}
 
# 将字符串的每一个字符放入字典一一对应 , 如 f对应0 Z对应1 一次类推。
for  in  range ( 58 ):
     Dict [ Str [i]]  =  i
 
=  [ 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个字符) 转化成列表方便后面的操作
     =  list ( 'BV          ' )
     for  in  range ( 10 ):
         r[s[i]]  =  Str [av  / /  58  * *  %  58 ]
     return  ''.join(r)
 
 
def  find_bid(p):
     bids  =  []
     =  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

2、获取视频的 CID

想要下载 1080 的视频,光有 bid 是不够的,还需要 登录后 Cookie 中的 SESSDATA 值和 cid .

首先登录 B 站将 Cookie 中的 SESSDATA 复制到对象头中。用地址为 https://api.bilibili.com/x/player/pagelist?bvid= url 返回 cid.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' ,
         'Cookie' 'SESSDATA=182cd036%2C1636985829%2C3b393%2A51' ,
         'Host' 'api.bilibili.com'
     }
 
     html  =  requests.get(url, headers = headers).json()
 
     infos  =  []
 
     data  =  html[ '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

3、下载视频

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

写一个Python脚本下载哔哩哔哩舞蹈区的所有视频

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
def  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 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' ,
         'Cookie' 'SESSDATA=182cd036%2C1636985829%2C3b393%2A51' ,
         'Host' 'api.bilibili.com'
     }
     html  =  requests.get(url_api, headers = headers).json()
     video_list  =  []
 
     for  in  html[ 'data' ][ 'durl' ]:
         video_list.append(i[ 'url' ])
     return  video_list
 
def  schedule_cmd(blocknum, blocksize, totalsize):
     percent  =  100.0  *  blocknum  *  blocksize /  totalsize
     =  ( '#'  *  round (percent)).ljust( 100 '-' )
     sys.stdout.write( '%.2f%%'  %  percent  +  '['  +  +  ']'  +  '\r' )
     sys.stdout.flush()
 
def  download(video_list, title, bid):
     for  in  video_list:
         opener  =  urllib.request.build_opener()
         opener.addheaders  =  [
             ( 'User-Agent' 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 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脚本下载哔哩哔哩舞蹈区的所有视频的文章就介绍到这了,更多相关python下载哔哩哔哩视频内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/weixin_48923393/article/details/117309457 。

最后此篇关于写一个Python脚本下载哔哩哔哩舞蹈区的所有视频的文章就讲到这里了,如果你想了解更多关于写一个Python脚本下载哔哩哔哩舞蹈区的所有视频的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com