B站,bilibili,以二次元闻名的站点,同时也是学习的天堂,推荐大家学习,尤其是你想要视频学习的话,里面有很多大佬发布了学习视频资源,如果有意,也可以下载下来慢慢看,慢慢学,对于本渣渣来说,收藏从未停止,学习从未开始!
这里推荐一个python基础学习视频教程,来自于莫烦python
https://www.bilibili.com/video/av16926522?p=1
友情提示:本渣渣没看过,因为,我太懒了。。
对于喜欢的视频,本渣渣当然是先down下来啦,尤其是身为白嫖怪,下载==学会!
我已经学废了,那么,你呢?!
前面本渣渣已经分享过 宝藏下载神器,python一键下载B站视频 强烈推荐使用,白嫖到底!!
不过调包侠还是有很多不方便之处,看不懂大佬的代码,不会修改调用!!
乘着有空隙,找了相关资料参考,找到接口重新写了一下b站视频下载爬虫,仅供参考和学习使用哈!
def get_cid(self,avid):
headers = {"User-Agent": self.ua.random}
url=f'https://api.bilibili.com/x/player/pagelist?aid={avid}&jsonp=jsonp'
cid_json = requests.get(url=url,headers=headers).json()
print(cid_json)
cid = cid_json['data'][0]['cid']
print(cid)
return cid
def get_vedio_url(self,avid,cid):
url=f'https://api.bilibili.com/x/player/playurl?avid={avid}&cid={cid}&qn=32&type=&otype=json'
print(url)
headers = {"User-Agent": self.ua.random}
vedio_url_json=requests.get(url=url,headers=headers).json()
print(vedio_url_json)
vedio_url=vedio_url_json['data']['durl'][0]['url']
print(vedio_url)
vedio_size=vedio_url_json['data']['durl'][0]['size']
vedio_size=vedio_size/1024/1024
vedio_size ="%.2fM" % vedio_size
print(vedio_size)
video_con=vedio_url,vedio_size
return video_con
B站视频下载存在反爬,请注意协议头,一定要携带referer
#下载视频
def get_vedio(self,vedio_url,title):
headers = {
"Referer": "https://www.bilibili.com",
"User-Agent": self.ua.random
}
print("开始下载视频..")
r=requests.get(url=vedio_url,headers=headers)
with open(f'{title}.flv',"wb") as f:
f.write(r.content)
print("下载视频完成!")
附完整源码参考:
# -*- coding: utf-8 -*-
#author:微信:huguo00289
import requests
from fake_useragent import UserAgent
import re
class Bz(object):
def __init__(self,url):
self.ua=UserAgent()
self.url=url
def get_html(self):
headers={"User-Agent":self.ua.random}
html=requests.get(url=self.url,headers=headers).content.decode("utf-8")
title=re.findall('<title data-vue-meta="true">(.+?)_哔哩哔哩',html)[0]
title=self.filter(title)
print(title)
rurl=re.findall('<meta data-vue-meta="true" itemprop="url" content="(.+?)">',html)[0]
print(rurl)
avid = re.findall("video/av(.+?)/", rurl)[0]
print(avid)
vedio_parm=title,rurl,avid
return vedio_parm
# 替换不合法字符
def filter(self, old_str):
pattern = r'[\|\/\<\>\:\*\?\\\"]'
new_str = re.sub(pattern, "_", old_str) # 剔除不合法字符
return new_str
# 获取cid
def get_cid(self,avid):
headers = {"User-Agent": self.ua.random}
url=f'https://api.bilibili.com/x/player/pagelist?aid={avid}&jsonp=jsonp'
cid_json = requests.get(url=url,headers=headers).json()
print(cid_json)
cid = cid_json['data'][0]['cid']
print(cid)
return cid
#获得视频真实flv地址
def get_vedio_url(self,avid,cid):
url=f'https://api.bilibili.com/x/player/playurl?avid={avid}&cid={cid}&qn=32&type=&otype=json'
print(url)
headers = {"User-Agent": self.ua.random}
vedio_url_json=requests.get(url=url,headers=headers).json()
print(vedio_url_json)
vedio_url=vedio_url_json['data']['durl'][0]['url']
print(vedio_url)
vedio_size=vedio_url_json['data']['durl'][0]['size']
vedio_size=vedio_size/1024/1024
vedio_size ="%.2fM" % vedio_size
print(vedio_size)
video_con=vedio_url,vedio_size
return video_con
#下载视频
def get_vedio(self,vedio_url,title):
headers = {
"Referer": "https://www.bilibili.com",
"User-Agent": self.ua.random
}
print("开始下载视频..")
r=requests.get(url=vedio_url,headers=headers)
with open(f'{title}.flv',"wb") as f:
f.write(r.content)
print("下载视频完成!")
if __name__=="__main__":
url="https://www.bilibili.com/video/BV1xh411k7by"
spider=Bz(url)
vedio_parm=spider.get_html()
cid=spider.get_cid(vedio_parm[2])
video_con=spider.get_vedio_url(vedio_parm[2],cid)
spider.get_vedio(video_con[0],vedio_parm[0])
附上参考资料:https://blog.csdn.net/qq_41696843/article/details/102488100
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1203086&highlight=b%D5%BE
再次提醒:功能仅供学习交流使用哈!
本文分享自 Python与SEO学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!