❤️心动挑战❤️python爬虫爬取B站封面图片

❤️心动挑战❤️python爬虫爬取B站封面图片对于文章 标题是其浓缩的精华 那么对于视频 其封面就可能是最亮眼的那一帧

大家好,欢迎来到IT知识分享网。

🍑源生动力😍

对于文章,标题是其浓缩的精华;那么对于视频,其封面就可能是最亮眼的那一帧。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号的api,点击传送至大佬页面
我一看,哦,还是B站的大佬,你这不讲武德,居然教别人搞B站(不过我喜欢🤪

# 根据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 -*- # @Time: 2021/8/17 20:12 # @Author: 远方的星 # @CSDN: https://blog.csdn.net/_ 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的视频为例:

在这里插入图片描述

在这里插入图片描述

🍊图片无损放大

在线网址:https://bigjpg.com/zh

这个是可以在线使用的,可以将你的图片在线放大并且做降噪处理。有兴趣的小伙伴可以自己尝试一下,我感觉效果还可以。

🍍参考文章

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/103594.html

(0)
上一篇 2026-02-19 20:50
下一篇 2025-02-21 15:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信