关于咪咕音乐的歌单数据爬取
作者:@xiashj21
本文为作者原创,转载请注明出处:https://www.cnblogs.com/xiashj21/p/16347577.html

前言
按照学校项目要求,想做一个资源分享的开放论坛,首先想到了音乐资源。由于版权的问题所以不能直接爬取音乐文件本身,所以采取了一种折中的方案,爬取音乐相关数据,如播放量、评分、简介等等。最后考虑到目前对相关算法的知识了解地不是很深,不能熟练地进行相关数据的筛选工作,故只爬取了相关歌单的信息作为本次项目的数据参考,不得不说也是一种遗憾的事。
一、相关准备工作
- python3,这里我使用了PyCharm这个著名的IDE
- 下载好requests 和 re两个第三方包,在数据爬取的过程中会用到
二、开始爬取
1.引入库
1 import requests 2 import re
这里request主要是用于请求访问网页,以获得网页相关信息;re是正则表达式,主要是用于爬取与正则表达式相匹配的信息的相关网页内容
2.分析网页特征
打开咪咕音乐的一些歌单,我们会发现这些歌单都有这样的一些特征:主体的网址都是
music.migu.cn/v3/music/playlist/(歌单ID)?origin=1001007
我们会发现,这些歌单最主要的就是中间歌单的ID名称不同,所以我们想爬哪些歌单,就可以将它们的歌单ID打包起来
1 list = [182310879,198481127,198516805,181699468,193392029,168898506,211186955,192835920]
3.访问网页
使用循环保证列表里面的每一个歌单都能被访问
1 for i in list: 2 url = f'https://music.migu.cn/v3/music/playlist/{i}?origin=1001007'
这里我们使用了f‘’(format)格式化输出,这样代码简洁方便
因为爬虫需要将自己伪装成一个浏览器才能获取到更多信息,所以我们需要将爬虫伪装成一个浏览器,右键,打开谷歌浏览器的检查工具
注意标头中的user-agent内容
< span class="typ">Mozilla</ span >< span class="pun">/</ span >< span class="lit">5.0</ span >< span class="pln"> </ span >< span class="pun">(</ span >< span class="typ">Windows</ span >< span class="pln"> NT </ span >< span class="lit">10.0</ span >< span class="pun">;</ span >< span class="pln"> </ span >< span class="typ">Win64</ span >< span class="pun">;</ span >< span class="pln"> x64</ span >< span class="pun">)</ span >< span class="pln"> </ span >< span class="typ">AppleWebKit</ span >< span class="pun">/</ span >< span class="lit">537.36</ span >< span class="pln"> </ span >< span class="pun">(</ span >< span class="pln">KHTML</ span >< span class="pun">,</ span >< span class="pln"> like </ span >< span class="typ">Gecko</ span >< span class="pun">)</ span >< span class="pln"> </ span >< span class="typ">Chrome</ span >< span class="pun">/</ span >< span class="lit">102.0</ span >< span class="pun">.</ span >< span class="lit">0.0</ span >< span class="pln"> </ span >< span class="typ">Safari</ span >< span class="pun">/</ span >< span class="lit">537.36</ span > |
这就是我们需要的内容了,它反映了我们浏览器的相关属性,我们就可以让爬虫模拟这样一个浏览器来进行数据访问及爬取了
1 headers = { 2 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' 3 }
在有了这些之后,爬虫就可以开始访问网页了
res = requests.get(url,headers=headers)
这里我们使用了requests包中的get函数,请求指定的页面信息,并返回页面主体
如果我们想获取其中一个歌单的信息,只需要这样:
1 import requests 2 url = f'https://music.migu.cn/v3/music/playlist/182310879?origin=1001007' 3 4 headers = { 5 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36' 6 } 7 8 9 res = requests.get(url,headers=headers) 10 print(res.text)
运行的结果就是这个歌单所在网页的源代码:(非常冗长,我就不放了,大家可以自己尝试一下)
在这个冗长的源代码里面,我们需要筛选我们需要的数据,比如歌单名称、播放量、歌单作者、歌单简介、每个歌单里包含的歌曲名称、歌曲演唱者、所在专辑这些相关的数据。所以筛选工作就开始了
4.信息筛选
- 歌单整体信息筛选(歌单名称、播放量、歌单作者、歌单简介)
在这一部分,我们注意到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | < span class="tag">< h1 </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"title"</ span >< span class="tag">></ span >< span class="pln">国风| 青鸟踏沧浪,随诗抵达他乡</ span >< span class="tag"></ h1 ></ span >< span class="pln"> </ span >< span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"singer-name"</ span >< span class="tag">></ span >< span class="pln"> </ span >< span class="tag">< i </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"iconfont cf-touxiang"</ span >< span class="tag">></ i ></ span >< span class="pln"> </ span >< span class="tag">< a </span>< span class="pln"> </ span >< span class="atn">href</ span >< span class="pun">=</ span >< span class="atv">"javascript:void(0);"</ span >< span class="tag">></ span >< span class="pln">欢欣的横笛</ span >< span class="tag"></ a ></ span >< span class="pln"> </ span >< span class="tag"></ div ></ span >< span class="pln"> </ span >< span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"playcount"</ span >< span class="tag">></ span >< span class="pln"> </ span >< span class="tag">< span ></ span >< span class="pln">播放量:</ span >< span class="tag"></ span ></ span >< span class="pln"> 163.8W </ span >< span class="tag"></ div ></ span >< span class="pln"> </ span >< span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"tags"</ span >< span class="tag">></ span >< span class="pln"> </ span >< span class="tag">< span ></ span >< span class="pln">标签:</ span >< span class="tag"></ span ></ span >< span class="pln"> </ span >< span class="tag">< a </span>< span class="pln"> </ span >< span class="atn">href</ span >< span class="pun">=</ span >< span class="atv">"/v3/music/playlist?tagId=1000001675"</ span >< span class="pln"> </ span >< span class="atn">target</ span >< span class="pun">=</ span >< span class="atv">"_blank"</ span >< span class="tag">>< i ></ span >< span class="pln">中国风</ span >< span class="tag"></ i ></ a ></ span >< span class="pln"> </ span >< span class="tag">< a </span>< span class="pln"> </ span >< span class="atn">href</ span >< span class="pun">=</ span >< span class="atv">"/v3/music/playlist?tagId=1000587673"</ span >< span class="pln"> </ span >< span class="atn">target</ span >< span class="pun">=</ span >< span class="atv">"_blank"</ span >< span class="tag">>< i ></ span >< span class="pln">小清新</ span >< span class="tag"></ i ></ a ></ span >< span class="pln"> </ span >< span class="tag">< a </span>< span class="pln"> </ span >< span class="atn">href</ span >< span class="pun">=</ span >< span class="atv">"/v3/music/playlist?tagId=1003449698"</ span >< span class="pln"> </ span >< span class="atn">target</ span >< span class="pun">=</ span >< span class="atv">"_blank"</ span >< span class="tag">>< i ></ span >< span class="pln">国风流行</ span >< span class="tag"></ i ></ a ></ span >< span class="pln"> </ span >< span class="tag"></ div ></ span >< span class="pln"> </ span >< span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"intro-wrapper J_IntroWrapper"</ span >< span class="tag">></ span >< span class="pln"> </ span >< span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"intro"</ span >< span class="pln"> </ span >< span class="atn">title</ span >< span class="pun">=</ span >< span class="atv">"当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。"</ span >< span class="tag">></ span >< span class="pln"> </ span >< span class="tag">< i </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"J_IntroInlineLabel"</ span >< span class="tag">></ span >< span class="pln">简介:</ span >< span class="tag"></ i >< span </span>< span class="pln"> </ span >< span class="atn">id</ span >< span class="pun">=</ span >< span class="atv">"J_IntroInline"</ span >< span class="tag">></ span >< span class="pln">当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。</ span >< span class="tag"></ span ></ span >< span class="pln"> </ span >< span class="tag"></ div ></ span >< span class="pln"> </ span >< span class="tag">< button </span>< span class="pln"> </ span >< span class="atn">id</ span >< span class="pun">=</ span >< span class="atv">"J_IntroMore"</ span >< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"intro-more"</ span >< span class="tag">></ span >< span class="pln">查看更多</ span >< span class="tag"></ button ></ span >< span class="pln"> </ span >< span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"intro-details J_IntroDetails"</ span >< span class="tag">></ span >< span class="pln">当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。</ span >< span class="tag"></ div ></ span > |
每个歌单的标题位于 <h1 class="title"></h1>之间
1 | < span class="tag">< h1 </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"title"</ span >< span class="tag">></ span >< span class="pln">国风| 青鸟踏沧浪,随诗抵达他乡</ span >< span class="tag"></ h1 ></ span > |
故针对标题的爬取,我们采用re包里的findall函数,匹配到相应字符之后返回一个包含所有满足条件字符的列表,关于爬取的数据我还做了一个解码工作,只解码用‘utf-8’编码的数据,防止最后返回的数据是乱码,同时这里还用了r‘’这样的转义字符,就是为了防止一些相关的符号如‘\’被python解释器误认为是换行符,从而使获得的数据有误
title = re.findall(r'<h1 class="title">(.*?)</h1>',res.content.decode(encoding= 'utf-8'))
(.?*)分别表示匹配任意1个字符(除了\n);匹配前⼀个字符出现0次或者无限次,即可有可无;匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有。这样一来,HTML标签里的所有可能的字符都包含进去了
每个歌单的作者位于<a href="javascript:void(0);"></a>之间
1 | < span class="tag">< a </span>< span class="pln"> </ span >< span class="atn">href</ span >< span class="pun">=</ span >< span class="atv">"javascript:void(0);"</ span >< span class="tag">></ span >< span class="pln">欢欣的横笛</ span >< span class="tag"></ a ></ span > |
故爬取作者的代码原理同上:
author = re.findall(r'<a href="javascript:(.*?)</a>',res.content.decode(encoding= 'utf-8'))
每个歌单的播放量位于:
<div class="playcount">
<span>播放量:</span>
</div>
1 2 3 4 | < span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"playcount"</ span >< span class="tag">></ span >< span class="pln"> </ span >< span class="tag">< span ></ span >< span class="pln">播放量:</ span >< span class="tag"></ span ></ span >< span class="pln"> 163.8W </ span >< span class="tag"></ div ></ span > |
故爬取歌单播放量的代码如下:
1 playback_volume = re.findall(r'''<span>播放量:</span> 2 (.*?) 3 </div>''', res.content.decode(encoding='utf-8'))
每个歌单的相关简介位于<div class="intro-details J_IntroDetails"></div>之间
1 | < span class="tag">< div </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"intro-details J_IntroDetails"</ span >< span class="tag">></ span >< span class="pln">当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。</ span >< span class="tag"></ div ></ span > |
故爬取歌单简介的代码如下:
brief_introduction = re.findall(r'div class="intro-details J_IntroDetails">(.*?)</div>',res.content.decode(encoding= 'utf-8'))
- 歌单歌曲信息筛选(歌曲名称、歌曲演唱者、所在专辑)
在这一部分,我们注意到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | < span class="tag">< a </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"J-btn-share"</ span >< span class="pln"> </ span >< span class="atn">title</ span >< span class="pun">=</ span >< span class="atv">"分享"</ span >< span class="pln"> </ span >< span class="atn">data-shareType</ span >< span class="pun">=</ span >< span class="atv">"2"</ span >< span class="pln"> </ span >< span class="atn">data-share</ span >< span class="pun">=</ span >< span class="atv">'{ "type":"song", "title":"裁梦为魂", "linkUrl":"/v3/music/song/60076260976", "imgUrl":"//cdnmusic.migu.cn/picture/2019/1031/0409/ASc34994002ea64d979441dbd1bc6f652c.jpg", "summary":"裁梦为魂", "singer":"银临", "album":"蚍蜉渡海" }'</ span >< span class="pln"> </ span >< span class="tag">></ span >< span class="pln"> </ span >< span class="tag">< a </span>< span class="pln"> </ span >< span class="atn">class</ span >< span class="pun">=</ span >< span class="atv">"J-btn-share"</ span >< span class="pln"> </ span >< span class="atn">title</ span >< span class="pun">=</ span >< span class="atv">"分享"</ span >< span class="pln"> </ span >< span class="atn">data-shareType</ span >< span class="pun">=</ span >< span class="atv">"2"</ span >< span class="pln"> </ span >< span class="atn">data-share</ span >< span class="pun">=</ span >< span class="atv">'{ "type":"song", "title":"烟雨弄莲舟", "linkUrl":"/v3/music/song/69929500505", "imgUrl":"//cdnmusic.migu.cn/picture/2020/0814/1435/AS6db154b8ddfbfdcab1ee48ca8047ee28.jpg", "summary":"烟雨弄莲舟", "singer":"玄觞", "album":"烟雨弄莲舟" }'</ span >< span class="pln"> </ span >< span class="tag">></ span >< span class="pln"> ...</ span > |
故歌曲名称位于"summary":后;歌手位于"singer":后;专辑位于"album"后。爬取歌单歌曲信息的代码如下:
1 song = re.findall(r'"summary":"(.*?)",',res.content.decode(encoding='utf-8')) 2 singer = re.findall(r'"singer":"(.*?)",',res.content.decode(encoding= 'utf-8')) 3 album = re.findall(r'''"album":"(.*?)" 4 }' 5 >''', res.content.decode(encoding='utf-8'))
5. 完整代码及运行结果
1 # 引入爬虫需要的request包和正则表达式包 2 import requests 3 import re 4 5 # 创建列表,将所需要的歌单特征ID写入 6 list = [182310879,198481127,198516805,181699468,193392029,168898506,211186955,192835920,] 7 8 # 将列表里的元素循环,使用format格式化输出,还原出每个歌单所对应的网址 9 for i in list: 10 url = f'https://music.migu.cn/v3/music/playlist/{i}?origin=1001007' 11 12 # 模拟浏览器访问网页 13 headers = { 14 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36' 15 } 16 17 # 调用request中“get”用法,请求指定的页面信息,并返回实体主体 18 res = requests.get(url,headers=headers) 19 20 # 调用正则表达式中”findall“用法,使用r转义字符串,使得字符串里的特殊字符能够保持下来 21 # 返回出指定内容之后,使用.content.decode进行解码防止乱码 22 title = re.findall(r'<h1 class="title">(.*?)</h1>',res.content.decode(encoding= 'utf-8') ) 23 author = re.findall(r'<a href="javascript:(.*?)</a>',res.content.decode(encoding= 'utf-8') ) 24 playback_volume = re.findall(r'''<span>播放量:</span> 25 (.*?) 26 </div>''', res.content.decode(encoding='utf-8')) 27 brief_introduction = re.findall(r'iv class="intro-details J_IntroDetails">(.*?)</div>',res.content.decode(encoding= 'utf-8') ) 28 29 # 打印最终结果 30 print(title) 31 author = author[0] 32 print(author.replace('void(0);">','作者:')) 33 print(playback_volume) 34 print(brief_introduction) 35 print(url) 36 37 song = re.findall(r'"summary":"(.*?)",',res.content.decode(encoding='utf-8')) 38 singer = re.findall(r'"singer":"(.*?)",',res.content.decode(encoding= 'utf-8') ) 39 album = re.findall(r'''"album":"(.*?)" 40 }' 41 >''', res.content.decode(encoding='utf-8')) 42 43 # 打印最终结果 44 print(song) 45 print(singer) 46 print(album)
['国风| 青鸟踏沧浪,随诗抵达他乡'] 作者:欢欣的横笛 ['163.8W'] ['当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。'] https://music.migu.cn/v3/music/playlist/182310879?origin=1001007 ['当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。', '裁梦为魂', '烟雨弄莲舟', '西窗', '青山揽梦', '春秋', '渔家傲·秋思', '所以少年人 (电影《一生有你》插曲)', '逍遥辞', '雨中的旋律', '声律启蒙(央视LIVE经典咏流传)', '俗人言', '梦生', '知秋', '兰因赋', '茶酒伴', '空谷幽兰', '荏苒冬春去', '醉问客家夜', '不知归期的故人'] ['', '银临', '玄觞', '杨晓峰', '银临', '齐一', '陈伟伦', '', '徐良', '丁栋', '赵照', '谢春花', '匡笑余', '孟凡明', '张三弥', '谢春花', '许巍', '谢春花', '茉莉僧', '房东的猫、陆宇鹏'] ['蚍蜉渡海', '烟雨弄莲舟', '遇见未央 陌世界', '蚍蜉渡海', '执念', '念思愁', '所以少年人', '逍遥辞', '', '经典咏流传第二期', '俗人言', '江湖边', '知秋', 'Tbang2017•红', '算云烟', '此时此刻', '算云烟', '理想与爱情', '房东的猫'] ['华语 | 狂拽酷炫,就是有被讨厌的勇气'] 作者:童稚的巴赫 ['154.6W'] ['以前我认为自己带给别人的感受很重要,现在我觉得自己的感受才最重要。自信的你最美!一起来听听一秒自气场全开的歌单吧~'] https://music.migu.cn/v3/music/playlist/198481127?origin=1001007 ['以前我认为自己带给别人的感受很重要,现在我觉得自己的感受才最重要。自信的你最美!一起来听听一秒自气场全开的歌单吧~', '花蝴蝶', '别找我麻烦', '你要跳舞吗', '我不是你谁的谁', '娱乐天空(中国新歌声总决赛)', '三尺', '我管你', '超人不会飞', '我怎么这么好看', '骑士精神', '为梦而狂', '勋章(电影《我是证人》主题曲)', '火星人来过(火星情报局2主题曲)', '找自己', '我和自己的约会', '我的未来式(电视剧《爱情公寓》片头曲)', '改变', '我(我是歌手第四季)', '就让这首歌'] ['', '蔡依林', '蔡健雅', '新裤子', '蔡文静', '陈奕迅/叶晓粤', '许嵩', '华晨宇', '周杰伦', '大张伟', '蔡依林', '关喆', '鹿晗', '薛之谦', '陶喆', '梁静茹', '郭采洁', '张靓颖', '苏运莹', '张震岳'] ['花蝴蝶', '说到爱', '生命因你而火热', '是我啊', '中国新歌声第二季 第15期', '呼吸之野', '异类', '跨时代', '20是件更美好的事', '绝版公主蔡依林 Jolin梦绮地精选', '寂寞', '勋章', '渡 The Crossing', 'I'm OK', '我喜欢', '隐形超人', '改变', '我是歌手第四季 第四期: 补位赛', 'OK'] ['经典老歌 | 乐坛女声的爱与纠葛'] 作者:豪爽的海顿 ['175.1W'] ['曾经的华语乐坛,各种神仙打架,天王天后,交相辉映,缔造者一个又一个传奇,他们之间的相互竞争,精彩纷呈,却也为我们带来了一个又一个精彩的作品,今天,就让我们听着歌,一起回忆那些天后与天后之间的爱与纠葛'] https://music.migu.cn/v3/music/playlist/198516805?origin=1001007 ['曾经的华语乐坛,各种神仙打架,天王天后,交相辉映,缔造者一个又一个传奇,他们之间的相互竞争,精彩纷呈,却也为我们带来了一个又一个精彩的作品,今天,就让我们听着歌,一起回忆那些天后与天后之间的爱与纠葛', '后来(我敢Live版)', '各自安好', '暖暖 (电视剧《周末父母》片头曲)', '美杜莎(央视2015全球中文音乐榜上榜)', '大艺术家(快乐大本营)', '劫后余生', '心服口服', '爱与痛的边缘 (Live)', '小小(元宵喜乐会2015)', '恋人未满', '血腥爱情故事', '好胆你就来', '当爱已成往事(电影《霸王别姬》主题曲)', '爱上一个不回家的人(Live)', '芳华绝代', '单身女人', '天使', '执迷不悔', '白天不懂夜的黑 (电视剧《夜市人生》插曲)', '山不转水转'] ['', '刘若英', '刘若英', '梁静茹', '蔡依林', '蔡依林', '萧亚轩', '陈慧琳', '陈慧琳', '容祖儿', '容祖儿', '张惠妹', '张惠妹', '林忆莲/李宗盛', '林忆莲', '张国荣/梅艳芳', '郑秀文/梅艳芳', '王菲', '王菲', '那英', '那英'] ['Renext我敢 世界巡回演唱会', '各自安好', '亲亲', '2015全球中文音乐榜上榜第十八期', '快乐大本营2012', '不解释亲吻', '爱', '10×10 我至爱演唱会', '2015湖南卫视元宵喜乐会', 'Joey & Joey', 'AMIT2', '阿密特', '看吧!Honnba', 'Sandy Lam Concert Mmxi', 'With', 'With', '天空', '菲卖品 王菲精选', '白天不懂夜的黑', '山不转水转'] ['欧美 | 勾起回忆的经典乐曲'] 作者:C位的小钹 ['406.3W'] ['前奏响起,是否一秒就牵住了你的神经;歌声落幕,你是否早已深陷其中。用一首熟悉的经典英文歌曲,撩动你沉闷的神经。'] https://music.migu.cn/v3/music/playlist/181699468?origin=1001007 ['前奏响起,是否一秒就牵住了你的神经;歌声落幕,你是否早已深陷其中。用一首熟悉的经典英文歌曲,撩动你沉闷的神经。', 'Burning', 'Need You Now', 'Shape Of You', 'Be What You Wanna Be', 'The Saltwater Room', 'Pretty Boy', 'Big Big World', 'My Love', 'Trouble Is a Friend (Spike Stent Remix)', 'Don't Push Me', 'What Makes You Beautiful', 'Faded', 'Dissolve', 'Baby', 'Good Time', 'As Long As You Love Me', 'You Raise Me Up', 'Take Me To Your Heart(With Hyesung)', 'Something Just Like This', 'God Is A Girl'] ['', 'Maria Arredondo', 'Lady A', 'Ed Sheeran', 'Darin/Dara Rolins', 'Owl City', 'M2M', 'Emilia', 'Westlife', 'Lenka', 'Sweetbox', 'One Direction', 'Alan Walker/Iselin Solheim', 'Absofacto', 'Justin Bieber/Ludacris', 'Carly Rae Jepsen/Owl City', 'Big Sean/Justin Bieber', 'Westlife', 'Michael Learns To Rock', 'The Chainsmokers/Coldplay', 'Groove Coverage'] ['Not Going Under', 'Need You Now (Deluxe)', '', 'Darin', 'Maybe I'm Dreaming', 'Shades Of Purple', 'Big Big World', 'The Greatest Hits Vol. 1', 'Trouble Is A Friend (Spike Stent Remix)', 'Jade', 'What Makes You Beautiful', 'Different World', 'Thousand Peaces', 'My Worlds', 'Good Time', 'As Long As You Love Me', 'Voices From The FIFA World Cup', 'All The Best Of MLTR', 'Something Just Like This', '7 Years And 50 Days'] ['偶像剧里的小情歌,甜蜜°拉满'] 作者:C位的木琴 ['79.0W'] [] https://music.migu.cn/v3/music/playlist/193392029?origin=1001007 ['千万勇敢(影视剧《司藤》主题曲)', '扑通扑通喜欢你(影视剧《扑通扑通喜欢你》主题曲)', '花!(电视剧《玲珑》片尾曲)', '真爱起舞(电视剧《假日暖洋洋》插曲)', '如约(《我就是这般女子》网络剧插曲)', '我们的罗曼史(影视剧《少爷与我的罗曼史》主题曲)', '天生一对', '告白的前奏(《你听起来很甜》影视剧插曲)', '爱是', '古画(电视剧《如意芳霏》插曲)', '不说谎恋人(网剧《不说谎恋人》片头曲)', '无悔 (电视剧《亲爱的义祁君》主题曲)', '一首暖暖的(电视剧《暖暖,请多指教》片头曲)', '心光(电视剧《下一站是幸福》主题曲)'] ['', '景甜', '罗正', '钱正昊', '群星', '熊汝霖/吴琼', '吕书君/苏婉', '李斯丹妮', '莫非定律More Feel', '连淮伟/彭雅琦', '鞠婧祎', 'sis_NoNo洪一诺', '叶炫清', '刘人语', '胡夏'] ['千万勇敢', '扑通扑通喜欢你', '花!', '《假日暖洋洋》电视原声', '《我就是这般女子》网络剧原声带', '《少爷与我的罗曼史》电视原声', '《这就是生活》电视原声', '《你听起来很甜》影视原声带', '《半是蜜糖半是伤》电视原声', '《如意芳霏》电视原声', '《不说谎恋人》网剧原声', '《亲爱的义祁君》电视原声', '一首暖暖的', '《下一站是幸福》电视原声'] ['听一遍就用一辈子的英文来电铃声'] 作者:Duang的簧风琴 ['376.1W'] ['有了这个歌单,来电铃声好听到不想接电话啦'] https://music.migu.cn/v3/music/playlist/168898506?origin=1001007 ['有了这个歌单,来电铃声好听到不想接电话啦', 'That Girl', 'Until You', 'You', 'Dance Monkey', 'Sunshine Girl (电影《滚蛋吧!肿瘤君》插曲)', 'Don't Be Gone Too Long', 'Drunk in Love', 'The Show (Live at Rhapsody, Seattle, WA - 2008)', 'New Soul', 'What Makes You Beautiful', 'Rainbow', 'Some Type Of Love', 'Boyfriend(Acoustic Version)', 'I Need You', 'I Do', 'Summer Vibe', 'My Dilemma', 'Lemon Tree', 'Baby', 'Love Story'] ['', 'Olly Murs', 'Shayne Ward', 'Lollipop', 'Tones and I', 'moumoon', 'Chris Brown', 'Beyoncé/Jay-Z', 'Lenka', 'Vox Angeli', 'One Direction', 'Jessie J', 'Charlie Puth', 'Justin Bieber', 'Westlife', 'Westlife', 'Walk Off The Earth', 'Selena Gomez & The Scene', 'Fool's Garden', 'Justin Bieber/Ludacris', 'Taylor Swift'] ['24 HRS (Deluxe)', 'Breathless', 'Together', 'Summer Nights', '着ラブ2', 'X (Deluxe Version)', 'BEYONCÉ', 'Live 2008', 'Irlande', 'What Makes You Beautiful', 'Who You Are', 'Nine Track Mind (Deluxe)', 'Believe Acoustic', 'Westlife', 'Back Home', 'R.E.V.O.', 'When The Sun Goes Down', 'Dish Of The Day', 'My Worlds', 'Fearless (Platinum Edition)'] ['经典港风| 绝代风华,经典永不过时'] 作者:好奇的手鼓 ['65.7W'] ['复古港风",过去的,流行元素它代表那个时代,最新锐的意识和最鲜明的态度。不沉闷、不单调;大胆、有张力这种历久弥新的美,跨越时代依然经久不息'] https://music.migu.cn/v3/music/playlist/211186955?origin=1001007 ['复古港风",过去的,流行元素它代表那个时代,最新锐的意识和最鲜明的态度。不沉闷、不单调;大胆、有张力这种历久弥新的美,跨越时代依然经久不息', '谁明浪子心 (电视剧《还我本色》主题曲)', '不老的传说', '一生不变(电视剧《蓝月亮》主题曲)', 'Play It Loud', '真的爱情定可到未来 (电视剧 《原振侠》插曲)', '一千零一夜(Live)', '红日(Live)', '千载不变 (Live)', '阿Lam日记', '女人的弱点', '情已逝 (2000版)', '这个冬天不太冷(2000版)', '爱情陷阱 (Live)', '偏偏喜欢你', '朋友', '雨夜的浪漫 (Live)', '加油', '摘星', '一生何求(电视剧《义不容情 》主题曲)', '前尘'] ['', '王杰', '张学友', '李克勤', '黄贯中', '黎明', '李克勤', '李克勤', '温拿乐队', '林子祥', '叶蒨文', '张学友', '张学友', '谭咏麟', '陈百强', '谭咏麟', '谭咏麟', '宇风', '陈百强', '陈百强', '林忆莲'] ['谁明浪子心', '不老的传说', '一年半载', 'Play It Loud', '黎明音乐大全101', '港乐·克勤 (Live)', '李克勤得心应手演唱会2006', '温拿33好时光演唱会', '十三·子祥', '女人的弱点', 'Jacky Cheung 15', 'Jacky Cheung 15', '谭咏麟 ’86万众狂欢演唱会', '华纳23周年纪念精选', '环球词选-向雪怀', '左麟右李演唱会 2009', 'ELEMENTS -中词西曲', '四星汇聚', '华纳23周年纪念精选', '最好的…林忆莲'] ['理想女性|悄然绽放的铿锵玫瑰'] 作者:聪明的短笛 ['92.9W'] ['女性,多么美好的词语。独立、优秀、自信而又美丽。旧时代的争取,新时代的站立,每一样历久弥新的优良品质由我们撑起,愿我们永远做自己!'] https://music.migu.cn/v3/music/playlist/192835920?origin=1001007 ['女性,多么美好的词语。独立、优秀、自信而又美丽。旧时代的争取,新时代的站立,每一样历久弥新的优良品质由我们撑起,愿我们永远做自己!', '女爵', '我是女生', '红色高跟鞋 (电影《爱呼2:爱情左右》主题曲)', '女人花(电视剧《东方母亲》主题曲)', '不一样又怎样', '可爱女人', '挥着翅膀的女孩', '逆光', '独立日', '钱夫人', '如花', '血腥爱情故事', '第二性', '娘子汉', '女王', '学会', 'Gentlewoman'] ['', '杨乃文', '徐怀钰', '蔡健雅', '梅艳芳', '蔡依林', '周杰伦', '容祖儿', '孙燕姿', '金海心', '谭维维', '谭维维', '张惠妹', '蔡依林', '蔡依林', '陈珊妮', '孙燕姿', 'A-Lin'] ['女爵', 'Yuki 第一张个人专辑', '若你碰到他', '女人花', '呸', 'Initial J', '我的骄傲', '逆光', '独立日', '姐放3811', '姐放3811', 'AMIT2', '呸', 'Myself', '低调人生', '未完成', '罪恶感']
三、过程中遇到的困难反思及下一步优化
从运行结果中我们发现,每个歌单的简介都出现了两次,什么原因呢?因为在网页源代码中,歌单简介也以相同的关键字出现了一次
<div class="action J_moreShareAddColl" data-type="s,r" data-shareType="2" data-share='{ "type":"songlist", "title":"国风| 青鸟踏沧浪,随诗抵达他乡", "linkUrl":"/v3/music/playlist/182310879", "imgUrl":"//d.musicapp.migu.cn/prod/playlist-service/playListimg/0ad4914c-1b98-4123-8452-b2f5f9ac364a.jpg", "summary":"当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。", "singer":"", "album":"国风| 青鸟踏沧浪,随诗抵达他乡"}'>
1 | < span class="str">"summary"</ span >< span class="pun">:</ span >< span class="str">"当民谣遇上古风,是诗人的挥笔,是诗情画意的缠绵婉转。"</ span >< span class="pln"> </ span > |
所以就出现了这样的情况
本来我想的是爬取所有的咪咕音乐歌曲歌单,可是因为没有相关的代理池,不能稳定爬取那么多多数据,同时也并不了解咪咕音乐歌曲歌单ID的分布规律(因为根据调查,发现它并不是从1开始的)所有相关想法就没能付诸实践,只找了几个歌单进行一些数据的爬取。
同时关于爬取出的数据的整理,我下次会考虑使用Excel表单的形式,这也是我下一步优化的方向。
总结
以上就是关于咪咕音乐歌单的数据爬取,相信我能够从这次的经历中收获不少。同时感谢小组中每一个人的辛勤付出。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix