公众号后台回复“图书“,了解更多号主新书内容
作者:曜
来源:菜J学Python
作者简介:曜,好奇心重的科研学生党,单纯的爬虫爱好者,以输出倒逼自己输入,希望与大家一起进步。
01
前言
现在要说年轻人的聚集地,小破站(B站)绝对是大多数人的选择,毕竟小破站无所不有,无所不能。最近又发现了大家上B站除了看番,看剧,还有听音乐(如下图),既然这样何不把这些周董的歌的音频爬到本地,供我们享受嘞!
话不多说开始着手。
所需要的第三方库:
import requests
from lxml import etree
import re
实现的大思路分为两步:
1、获得这193首歌的名字
2、将音频下载下来,并以其对应的名字本地保存
02
获取歌名
接下来进行第一个任务:获取名字
通过对网页进行分析发现列表的名字以json格式呈现,如下图所示:
对该url请求得到json数据:
观察发现歌曲名字在data里面的part部分,接下来写代码:
#定义一个函数用来获得歌曲名字列表
def get_songname():
url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1fx411N7bU&jsonp=jsonp'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42',
'referer': 'https://www.bilibili.com/video/BV1fx411N7bU'
}
r =requests.get(url,headers=headers).json()
data_list = r['data']
title_list = []
for title in data_list:
title_list.append(title['part'])
return title_list
03
音频下载
接下来进行第二步:获取音频
依旧对网页分析发现,下面这两张图所对应的分别是视频地址(纯视频无声)【图一】
音频地址【图二】(所以想要爬取视频,emm,大家懂得.....)
【图一】
【图二】
接下来我们要做的就是从网页源代码中获得音频地址,这就需要用到正则表达式。
ok,然后我们写代码来获得地址,并把文件保存到本地:
#传入之前获得的歌曲名字列表
def get_song(title_list):
for i in range(len(title_list)):#歌曲数量与列表歌曲名数量保持一致
#构造每一首歌的链接
url1 = f'https://www.bilibili.com/video/BV1fx411N7bU?p={str(i+1)}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42',
'referer': 'https://www.bilibili.com/video/BV1fx411N7bU'
}
r = requests.get(url1,headers = headers)
tree = etree.HTML(r.text)
link = tree.xpath("/html/head/script[5]/text()")[0]
#构造正则表达式获得音频地址(获得b站视频将audio换成video即可)
x = re.findall(r'"audio":\[{"id":\d+,"baseUrl":"(.*?)"', link)[0]
audio_ = requests.get(x, headers=headers)
with open(f"{title_list[i]}.mp3", 'wb')as f:
f.write(audio_.content)
04
运行结果
运行结果如图所示:
◆ ◆ ◆ ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗