如何用Python爬取酷我音乐,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
前两天听了一下酷我音乐官网的音乐,觉得上面的音乐还不错,想把他们爬取得到。开始,完全没有头绪,但是,最后有了实现它的思路,那就是通过两个json文件最终得到想听的音乐。
实现这个过程的主要模块有requests、json、urllib.request、urllib.parse,其中requests模块用于请求得到相应的数据(这里是得到json数据),json模块用于对得到的json数据进行处理(将json数据转换成字典,主要使用json.loads()方法),urllib.request(使用其urlretrieve()方法,用于下载音乐),urllib.parse(使用其quote()方法,用于对输入的字符串进行编码)。
首先,我们需要来到酷我音乐的官网(http://www.kuwo.cn/
),在输入框中输入关键字,小编输入的是:破茧
然后回车,可以得到搜索相应的歌曲列表,然而这些数据都是动态加载的,使用requests模块如果直接请求这个网址,根本不可能得到这些数据,这个时候我们可以按电脑键盘F12,来到开发者模式,点击Network下面的XHR,找到这些歌曲列表的那个网址,具体为:
我们需要得到这些歌曲中相应的数据如下:
其中name和artist关键字对应的值为展示用和最终.mp3文件名称,rid关键字对应的值是为后面过程所用。
当然,访问这个网址不是很简单的,需要添加请求头。参考代码如下:
musicName=input('请输入歌曲名称:')
encodName=quote(musicName)
url='https://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn=1&rn=30&httpsStatus=1'.format(encodName)
referer='https://www.kuwo.cn/search/list?key={}'.format(encodName)
# 请求头
headers = {
"Cookie": "_ga=GA1.2.2021007609.1602479334; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602479334,1602673632; _gid=GA1.2.168402150.1602673633; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1602673824; kw_token=5LER5W4ZD1C",
"csrf": "5LER5W4ZD1C",
"Referer": "{}".format(referer),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",
}
response=requests.get(url=url,headers=headers)
dict2=json.loads(response.text)
misicInfo=dict2['data']['list'] # 歌曲信息的列表
musicNames=list() # 歌曲名称的列表
rids=list() # 存储歌曲rid的列表
for i in range(len(misicInfo)):
name=misicInfo[i]['name']+'-'+misicInfo[i]['artist']
musicNames.append(name)
rids.append(misicInfo[i]['rid'])
print('【{}】-{}->>>{}'.format(i+1,int(random.random()*10)*'#$',name))
我们选择上面列表中歌曲进行试听,可以发现,在刚才那个下面有一个这样的网址,里面也是一个json数据,放有我试听歌曲的下载链接。如下:
对这个网址进行分析可以得知,需要刚才我们的那个 rid 数据才能访问到相应的json数据。网址为:http://www.kuwo.cn/url?format=mp3&rid=**140897945**&response=url&type=convert\_url3&br=128kmp3&from=web&t=1603463521198&httpsStatus=1
,也许读者得到的那个网址长度比我这个长一些,我这个是去掉最后面的那个参数的,因为我发现没有最后的那个参数,依旧可以访问到相应的数据。
参考代码如下:
from urllib.request import urlretrieve
from urllib.parse import quote
import requests
import random
import json
musicName=input('请输入歌曲名称:')
encodName=quote(musicName)
url='https://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn=1&rn=30&httpsStatus=1'.format(encodName)
referer='https://www.kuwo.cn/search/list?key={}'.format(encodName)
# 请求头
headers = {
"Cookie": "_ga=GA1.2.2021007609.1602479334; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1602479334,1602673632; _gid=GA1.2.168402150.1602673633; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1602673824; kw_token=5LER5W4ZD1C",
"csrf": "5LER5W4ZD1C",
"Referer": "{}".format(referer),
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",
}
response=requests.get(url=url,headers=headers)
dict2=json.loads(response.text)
misicInfo=dict2['data']['list'] # 歌曲信息的列表
musicNames=list() # 歌曲名称的列表
rids=list() # 存储歌曲rid的列表
for i in range(len(misicInfo)):
name=misicInfo[i]['name']+'-'+misicInfo[i]['artist']
musicNames.append(name)
rids.append(misicInfo[i]['rid'])
print('【{}】-{}->>>{}'.format(i+1,int(random.random()*10)*'#$',name))
id=int(input('请输入歌曲序号:'))
musicRid=rids[id-1]
url2='https://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1602674521838&httpsStatus=1'.format(musicRid)
headers2={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
response2=requests.get(url=url2,headers=headers2)
dict3=json.loads(response2.text)
downloadUrl=dict3['url']
path=input('请输入存储路径:')
urlretrieve(url=downloadUrl,filename=path+'\{}.mp3'.format(musicNames[id-1])) # 下载歌曲
运行结果:
找到相应的目录,可以发现在这个文件夹下面多了一个.mp3文件
首先,小编先声明一下:本程序参考代码仅供学习,切莫用于商业活动,一经被相关人员发现,本小编概不负责!
另外,需要指明的是希望读者一天不要多次运行本程序代码,从而减少服务其负担。
程序代码或许还有一定的不足!没有详细地分析这两个网址中的参数,读者有兴趣的话,可以尝试尝试。如果读者觉得小编的这篇文章还不错!离开的时候别忘了点上一个小小的赞!
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。