之前写了一半,然后觉得带代理继续写比较好,就写了个爬代理的爬虫,结果被代理平台封掉了。

于是直接找的现成的免费代理提取的,但是发现使用率有点低,基本上几千个ip才有几个能用,就离谱。

我们上一篇文章写到获取cid了。

然后我们看看这个cid里的数据都有啥。

本来是想show一下,但是文件有点大,所以还是不show了,大家自己尝试就好了。

我们直接取里面的pages的值,由于我前面的链接是一个多p的视频,所以里面的内容有点多。

简单的分析一下page1的内容吧。

{
    'cid': 373716747,
    'page': 1,
    'from': 'vupload',
    'part': '1.1 易语言基础_变量语法_讲师良人',
    'duration': 1505,
    'vid': '',
    'weblink': '',
    'dimension': {
        'width': 1220,
        'height': 1028,
        'rotate': 0
    },
    'first_frame': 'http://i1.hdslb.com/bfs/storyff/n210721a21rtx5r47pkyh124gv89xc8q_firsti.jpg'
}

首先,我们可以看到里面最明显的值---cid,然后再就是page---1,最后就是part,视频名字。
其实也就需要这三个值,或者也可以再加一个duration---时长。
单p的话,应该就一个cid,直接请求就行了,多p的话,通过循环即可。

然后获取下载的url即可。

cv = requests.get(cvapi+str(av),headers=headers, proxies=proxies)
cv = json.loads(cv.text)

cv = cv['data']['pages'][0]['cid']

downloadurl = "https://api.bilibili.com/x/player/playurl?avid="

url = requests.get(downloadurl+str(av)+"&cid="+str(cv)+"&qn=112", headers=headers, proxies=proxies)
url = json.loads(url.text)
{
    'code': 0,
    'message': '0',
    'ttl': 1,
    'data': {
        'from': 'local',
        'result': 'suee',
        'message': '',
        'quality': 64,
        'format': 'flv720',
        'timelength': 1504036,
        'accept_format': 'flv,flv720,flv480,mp4',
        'accept_description': ['高清 1080P', '高清 720P', '清晰 480P', '流畅 360P'],
        'accept_quality': [80, 64, 32, 16],
        'video_codecid': 7,
        'seek_param': 'start',
        'seek_type': 'offset',
        'durl': [{
            'order': 1,
            'length': 1504036,
            'size': 62443334,
            'ahead': '',
            'vhead': '',
            'url': 'https://cn-bj-se-bcache-01.bilivideo.com/upgcxcode/47/67/373716747/373716747-1-64.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1636107505&gen=playurlv2&os=bcache&oi=1694908747&trid=0000261793d560e54cb8a40e078776b5aae7u&platform=pc&upsig=358447b4e1d16d50f9044a8c82e45d7b&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&cdnid=60001&mid=0&bvc=vod&nettype=0&orderid=0,3&agrr=1&logo=80000000',
            'backup_url': ['https://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/47/67/373716747/373716747-1-64.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1636107505&gen=playurlv2&os=kodobv&oi=1694908747&trid=261793d560e54cb8a40e078776b5aae7u&platform=pc&upsig=5e8c91cc4586dd6ccc777e5fdaeb7db1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&bvc=vod&nettype=0&orderid=1,3&agrr=1&logo=40000000', 'https://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/47/67/373716747/373716747-1-64.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1636107505&gen=playurlv2&os=kodobv&oi=1694908747&trid=261793d560e54cb8a40e078776b5aae7u&platform=pc&upsig=5e8c91cc4586dd6ccc777e5fdaeb7db1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=0&bvc=vod&nettype=0&orderid=2,3&agrr=1&logo=40000000']
        }],
        'support_formats': [{
            'quality': 80,
            'format': 'flv',
            'new_description': '1080P 高清',
            'display_desc': '1080P',
            'superscript': ''
        }, {
            'quality': 64,
            'format': 'flv720',
            'new_description': '720P 高清',
            'display_desc': '720P',
            'superscript': ''
        }, {
            'quality': 32,
            'format': 'flv480',
            'new_description': '480P 清晰',
            'display_desc': '480P',
            'superscript': ''
        }, {
            'quality': 16,
            'format': 'mp4',
            'new_description': '360P 流畅',
            'display_desc': '360P',
            'superscript': ''
        }],
        'high_format': None
    }
}

通过requests直接请求下载链接,然后用with写入文件即可。
如果多p视频下载的话,可以通过前面的pages来循环获取cid即可,然后请求下载视频即可。

具体内容可以看我的GitHub,有代码可以参考。

最后修改:2021 年 11 月 05 日 10 : 52 PM
如果觉得我的文章对你有用,请随意赞赏