Python爬虫爬取B站封面图片,这才是我们学好爬虫的动力!

您所在的位置:网站首页 怎么提取b站视频的封面 Python爬虫爬取B站封面图片,这才是我们学好爬虫的动力!

Python爬虫爬取B站封面图片,这才是我们学好爬虫的动力!

2023-09-04 11:23| 来源: 网络整理| 查看: 265

 

 

 

源生动力

对于文章,标题是其浓缩的精华;那么对于视频,其封面就可能是最亮眼的那一帧。B站,作为最近比较火热的短视频平台,其舞蹈区各种各样的舞蹈,尤其是宅舞,深受“宅男”的喜爱。(

别和我说什么黑丝、jk,我真的不喜欢)谁不喜欢!

​​于是乎,我就尝试使用爬虫获取B站的封面。

网页获取

B站是有防爬措施的,我一开始根据网页进行分析,无果。

转念一想,这么火热的B站,想爬取的人肯定不止我一个,于是乎,我就开始搜索相关的文章和视频。

啪的一下,很快啊,我就找到一篇,根据B站AV号爬取封面图片的文章,我试了一下,咦,还真能用🤩(心中狂喜)

# 根据aid,获取封面 https://api.bilibili.com/x/web-interface/view?aid=(aid)

可转念一想,从去年开始,B站就开始用BV号了,哪来的AV号给我呀,文章里的AV号是哪来的呀?害,我转念又看了文章的日期,2019年,哦,那没事了,人家写那会,B站还没改呢😂

方法总比困难多,现在起码知道了怎么利用AV号,那我利用BV号找到AV号不就可以了吗?我真是个大聪明。

# 根据BV号获取cid https://api.bilibili.com/x/player/pagelist?bvid=(bvid,要带上开头的BV!) # 根据BV号和cid获取视频播放列表 https://api.bilibili.com/x/player/playurl?cid=(cid)&qn=(qn)&bvid=(bvid,要带上开头的BV!) # 根据BV号和cid获取aid https://api.bilibili.com/x/web-interface/view?cid=(cid)&bvid=(bvid,要带上开头的BV!)

总结上述内容的api,那么思路就有了,简直是有手就行呀,跟着大佬混,就是行!😏 先根据BV号找到cid,再根据BV号和cid获取aid,再根据aid获取封面。 而且爬取过程中的数据基本上都是json数据。其中: cid的数据在json的['data'][0]['cid']中 aid的数据在json的['data']['aid']中 封面图片的数据在json的['data']['pic']中 更详细的过程,我写在了代码的注释中👇 

完整代码 # -*- coding: UTF-8 -*- # @CSDN: https://blog.csdn.net/qq_44921056 import os import json import requests import chardet from fake_useragent import UserAgent # 随机产生请求头 ua = UserAgent(verify_ssl=False, path='D:/Pycharm/fake_useragent.json') # 随机切换请求头 def random_ua(): headers = { "accept-encoding": "gzip", # gzip压缩编码 能提高传输文件速率 "user-agent": ua.random } return headers # 创建文件夹 def path_creat(): _path = "D:/B站封面/" if not os.path.exists(_path): os.mkdir(_path) return _path # 对爬取的页面内容进行json格式处理 def get_text(url): res = requests.get(url=url, headers=random_ua()) res.encoding = chardet.detect(res.content)['encoding'] # 统一字符编码 res = res.text data = json.loads(res) # json格式化 return data # 根据bv号获取av号 def get_aid(bv): url_1 = 'https://api.bilibili.com/x/player/pagelist?bvid={}'.format(bv) response = get_text(url_1) cid = response['data'][0]['cid'] # 获取cid url_2 = 'https://api.bilibili.com/x/web-interface/view?cid={}&bvid={}'.format(cid, bv) response_2 = get_text(url_2) aid = response_2['data']['aid'] # 获取aid return aid # 根据av号获取封面图片 def get_image(aid): url_3 = 'https://api.bilibili.com/x/web-interface/view?aid={}'.format(aid) response_3 = get_text(url_3) image_url = response_3['data']['pic'] # 获取图片的下载连接 image = requests.get(url=image_url, headers=random_ua()).content # 获取图片 return image # 下载封面 def download(image, file_name): with open(file_name, 'wb') as f: f.write(image) f.close() def main(): k = 'Y' while k == 'Y': # 根据用户需要一直循环 path = path_creat() # 创建保存B站封面的文件夹 bv = input("请输入视频的bv号:") image_name = input("请你给想要下载的封面取一个喜欢的名字叭:") aid = get_aid(bv) image = get_image(aid) file_name = path + '{}.jpg'.format(image_name) download(image, file_name) print("封面提取完毕^_^") k = input("按Y键继续提取,按Q退出:") if __name__ == '__main__': main()

代码可直接复制运行

,如果对你有帮助,记得

点赞

哦,也是对作者最大的鼓励,不足之处可以在评论区多多指正、交流。

运行结果:美女姐姐,拿来把你

以BV号为BV1C5411P7qM的视频为例

在这里插入图片描述​​

​​在这里插入图片描述​​​​

⑥项目源码案例分享有

如果你用得到的话可以直接拿走,在我的QQ技术交流群里群号:948351247(纯技术交流和资源共享,广告勿入)以自助拿走

点击这里 领取

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3