仁科百华资料 如何利用 Python 批量下载 Bilibili up主视频

日本鬼父第二季

日本鬼父第二季

  • 首页
  • 哥也色
  • 开心色播
  • 四房色播
  • 欧美BT
  • 亚洲BT
  • 精美套图
  • 你的位置:日本鬼父第二季 > 欧美BT > 仁科百华资料 如何利用 Python 批量下载 Bilibili up主视频

    仁科百华资料 如何利用 Python 批量下载 Bilibili up主视频

    发布日期:2024-09-25 05:16    点击次数:93

    仁科百华资料 如何利用 Python 批量下载 Bilibili up主视频

    最近学习各式常识仁科百华资料,仍是从 Youtube 迁徙到了 Bilibili 。之前一直观得B站是个二次元的全国。天然当今亦然,然则各式学习资源险些太多了。最主要的原因便是莫得告白!有些视频的确很抢手,然则偶尔会有版权问题,会被B站下架,是以B站的保藏夹偶尔会出现视频丢失的情况。为了幸免这种情况的发生,决定把优秀的资源下载到腹地保存。是以又要请出咱们的神器Python了。

    利用 Python 的 Requests 库,基本上汇集上的资源没什么不行下载的。即使有,那么加上 Selenium 也不成问题。

    熟女乱伦网 一、利用you-get下载哔哩哔哩播放列表

    you-get 是一个开源法子,专诚用来下载各式视频的,从名字上来看,就知说念动身点应该仅仅为了下载 Youtube 视频的,之后跟着各式 contributer 的加入,发展成了一个不错下载各式视频网站的器具。不错在这里稽查中语阐述。

    1. 装置 you-get

    装置 you-get 之前,还得装置 you-get 的各式依赖才不错进愚弄用。 - python - FFmpeg

    2. 使用 you-get

    使用程序也很简便,径直一句话代码下载即可。

    you-get --playlist <url>
    

    PS:对于 you-get 不知说念为什么,有本领老是出现没速率的情况,况且对于文献名问题,没主义自界说。Forece 下载了几P,然后就不断的出现超时差错。于是就废弃了这个庞大的器具。

    二、利用 Python 下载B站播放列表视频

    对于 Python 爬虫就未几说了,这里也写不下,人人我方去B站学吧。这里仅仅讲一下分析经过。

    1. 分析网页

    通过分析视频列表页,发现基本上总共信息齐在 HTML 里边了。

    1. 视频、音频地址

    通过分析,亚洲欧美另类发现视频、音频被拆分为两部分。而这段代码齐在

    <script>window.__playinfo__=
    

    这段代码之后,进行 JSON 体式化之后省略是这表情的,通过分析,拿到刻下播放视频的 Video URL 还有 Audio URL。

    2. 并吞文献

    因为视频和音频是分袂的,是以需要用到 FFmpeg 来将两个文献进行并吞。铭记需要将 FFmpeg 加入环境变量先。并吞敕令是:

    ffmpeg -i video.mp4 -i audio.mp4 -c copy final.mp4
    
    3. 视频列表信息

    知说念如何下载单个视频后,就需要对总共这个词列表进行分析。很庆幸的是,在搜索联系良友的本领,发现了一个 API,

    https://api.bilibili.com/x/player/pagelist?aid=xxxxxx
    

    通过拜谒这个网址,就不错拿到一个 JSON 文献,里边便是播放列内外边的总共信息,不外需要传入一个 aid 值。 aid 值也很容易找到,在底本的 HTML 中就不错利用正则索要到。之后咱们就通过遍历这个 JSON 文献,然后就能下载总共的视频了。

    其实视频页面的 HTML 也能拿到这个列表,不外利用正则索要稍稍艰难了点。是以不如径直利用 API 赢得信息。

    4. 完满代码仁科百华资料

    import re
    import requests
    import json
    import os
    
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
               'cookie': ""  # YOUR COOKIES
               }
    
    def download_single_video(url, name):
        res = requests.get(url, headers=headers)
        video_pattern = '__playinfo__=(.*?)</script><script>'
        playlist_info = json.loads(re.findall(video_pattern, res.text)[0])
        video_url = playlist_info['data']['dash']['video'][0]['baseUrl']
        audio_url = playlist_info['data']['dash']['audio'][0]['baseUrl']
        save_file(video_url, 'video')
        save_file(audio_url, 'audio')
        merge(name)
        print('{} 下载兑现'.format(name))
    
    def save_file(url, type):
        download_content = requests.get(url, headers=headers).content
        with open('{}.mp4'.format(type), 'wb') as output:
            output.write(download_content)
    
    def merge(name):
        command = 'ffmpeg -i video.mp4 -i audio.mp4 -c copy "{}".mp4'.format(name)
        os.system(command)
        os.remove('video.mp4')
        os.remove('audio.mp4')
    
    def get_list_info(url):
        aid_pattern = 'window.__INITIAL_STATE__={"aid":(\d*?),'
        res = requests.get(url, headers=headers)
        aid = re.findall(aid_pattern, res.text)[0]
        playlist_json_url = 'https://api.bilibili.com/x/player/pagelist?aid={}'.format(aid)
        json_info = json.loads(requests.get(playlist_json_url, headers=headers).content.decode('utf-8'))['data']
        return json_info
    
    
    if __name__ == '__main__':
        base_url = 'https://www.bilibili.com/video/BV14J4114768'
        json_info = get_list_info(base_url)
        for i in json_info:
            p = i['page']
            name = 'P{} - {}'.format(p, i['part'])
            url = base_url + '?p={}'.format(p)
            download_single_video(url, name)
    


    栏目分类