安卓 微信 照片 电脑版
报!安卓版微信,更新啦!安卓机友苦等的黑暗模式,它终于来了!有图有真相。这个黑暗模式,去年就开始内测,然后又取消内测。今天,终于全面上线。想想也是,毕竟要适配这么多安卓设备,挺不容易滴。机哥赶紧带你们...
2024.11.20偶然的一次机会听到了房东的猫的《云烟成雨》,瞬间迷上了这慵懒的嗓音和学生气的歌词,然后一直去循环听她们的歌。然后还特意去刷了动漫《我是江小白》,好期待第二季...
我多想再见你,哪怕匆匆一眼就别离
想把房东的猫的所有歌曲下载到本地时,却发现需要付费。想到最近在学习的Python爬虫,所以想利用爬虫来获取音频文件,而且恰好网易云音乐是有直接的接口的,所以爬取过程相当简单。
配置基础为了简化爬取的过程,这里直接采用Selenium来从网页的源代码中获取我们所需要的链接。因此我们需要用到的基本工具如下:
Python(官网或Anaconda均可,推荐后者)Selenium(参照另一篇文章:https://zhuanlan.zhihu.com/p/42078956)Chrome浏览器分析:
如果爬取过网易云的网站的小伙伴都应该知道网易云是有反爬取机制的,POST时需要对一些信息的参数进行加密函数的模拟。但是这里为了简便,小白也能理解。直接使用了Selenium来模拟登录,然后使用接口来直接下载音乐和歌词。
实验步骤:
根据歌手ID获取该歌手的热门歌曲列表,歌曲名称和链接,并保存到csv文件中;读取csv文件,根据歌曲链接,提取歌曲ID,然后利用相应的接口,下载音乐和歌词;将音乐和歌词保存到本地。代码实现从上面的分析可以发现,我们的代码主要分为三部分,第一部分利用Selenium获取歌手的所有热门歌曲的链接和名称;第二部分根据歌曲id下载对应的歌词;第三部分根据歌曲id下载对应的音频文件。
获取歌手信息:
利用Selenium我们就不需要看对网页的请求了,直接可以从网页源码中提取相应的信息。查看歌手页面源码可以发现,我们需要的信息在iframe框架内,所以我们先需要切换到iframe:
browser.switch_to.frame(‘contentFrame‘)继续往下看,发现我们需要的歌曲名字和链接是在id="hotsong-list"的标签中,然后每一行对应的是一个tr标签。所以先获取所有的tr内容,然后遍历单个tr。
data = browser.find_element_by_id("hotsong-list").find_elements_by_tag_name("tr")注意:前一个是find_element,后一个是find_elements,后者返回一个列表。
接下来就是解析单个tr标签的内容,获取歌曲名字和链接,可以发现两者在class="txt"标签中,而且链接是href属性,名字是title属性,可以直接通过get_attribute()函数获取。
for i in range(len(data)):content = data[i].find_element_by_class_name("txt")href = content.find_element_by_tag_name("a").get_attribute("href")title = content.find_element_by_tag_name("b").get_attribute("title")song_info.append((title, href))下载歌词:
网易云有个获取歌词的接口,链接为:
http://music.163.com/api/song/lyric?id=513360721&lv=1&kv=1&tv=-1
链接中的数字就是歌曲的id,所以我们拥有歌曲id后,可以直接从该链接下载歌词,歌词文件是json格式,所以我们需要用到json包。
而且直接获取的歌词中,每行有一个时间轴,需要用正则表达式来剔除,完整代码如下:
def get_lyric(self):url = ‘http://music.163.com/api/song/lyric?‘ + ‘id=‘ + str(self.song_id) + ‘&lv=1&kv=1&tv=-1‘r = requests.get(url)json_obj = r.textj = json.loads(json_obj)lyric = j[‘lrc‘][‘lyric‘]# 利用正则表达式去除时间轴regex = re.compile(r‘\[.*\]‘)final_lyric = re.sub(regex, ‘‘, lyric)return final_lyric下载音乐:
网易云也提供了音频文件的接口,链接为:
http://music.163.com/song/media/outer/url?id=513360721.mp3
链接中的数字为歌曲的id,可以直接根据歌曲的id来下载音频文件。完整代码如下:
def get_mp3(self):url = ‘http://music.163.com/song/media/outer/url?id=‘ + str(self.song_id)+‘.mp3‘try:print("正在下载:{0}".format(self.song_name))urllib.request.urlretrieve(url, ‘{0}/{1}.mp3‘.format(self.path, self.song_name))print("Finish...")except:print("Fail...")源代码获取公众号回复:网易云
获取源代码
欢迎关注
报!安卓版微信,更新啦!安卓机友苦等的黑暗模式,它终于来了!有图有真相。这个黑暗模式,去年就开始内测,然后又取消内测。今天,终于全面上线。想想也是,毕竟要适配这么多安卓设备,挺不容易滴。机哥赶紧带你们...
2024.11.20植物大战僵尸第三部期待的人一定比较多吧,可以说第二部做的没有第一部那么好,但是我们依然还是一直喜欢植物大战僵尸这一款游戏的。今天小编来说说第一部到第三部僵尸的区别,然后在第一个留言区告诉大家怎么下载第...
2024.11.22作用:本代码是在python3.7,pycharm编辑器里演示通过python的requests,etree,request.urlretrieve下载虎牙直播平台的交友分类的美女图片操作步骤如下:1...
2024.11.20腾讯TIM电脑版是一款聊天办公沟通软件,该软件可以使用QQ号登录,里面的信息都是同步与QQ,但与之不同的就是里面去掉了所以无用的功能,可以说是一个简洁版QQ。想要腾讯QQ的用户请到下载银行哦!软件开发...
2024.11.20同学们好,我是陆十二 今天和大家分享一块可以下载网易云音乐歌曲、歌单以及专辑的软件。打开软件,我们可以直接搜索歌曲以及歌手,有两个音源供我们选择,我们也可以在网易云歌单以及专辑的分享按钮下复制链接进...
2024.11.21