之前写了一半,然后觉得带代理继续写比较好,就写了个爬代理的爬虫,结果被代理平台封掉了。
于是直接找的现成的免费代理提取的,但是发现使用率有点低,基本上几千个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,有代码可以参考。