跟我一起学-Python爬取(酷我)


来来来,有兴趣的可以看看

一 进入酷我音乐官网

http://www.kuwo.cn/

二 按下F12

在这里插入图片描述
跳出一个框框

三 在搜索栏输入先要搜索的内容,以薛之谦为例,点击搜索

在这里插入图片描述

四 获取音乐地址

在这里插入图片描述
看上图我们发现抓取到了许多的报文,但是哪些是有用的呢?
首先我们要想,想要获取音乐,我们是不是要获取音乐的请求地址,然后我们就在报文里找啊找,然后我们没有找到,那怎么办呢?,我们想呀想呀,忽然发现我们都没有播放音乐,当然是找不到的啦!既然想到了这里,那我们就找一首歌放放,这里播放<演员>,然后我们再看我们的报文里有没有歌曲请求地址。
在这里插入图片描述
在这里插入图片描述
如果还是没有找到的话请尝试按下F5刷新
在这里插入图片描述
好了,现在我们找到音乐地址了,我们请求看看是什么
在这里插入图片描述

呀打开就能放了呀,so这就是我们要的音乐地址,接着我们找到地址了怎么办呢?

五 分析

接下来,我们是不是要想想音乐地址怎么动态获取呢?对就是动态获取,总不能我们自己手动去寻找地址获取音乐吧!

so,我们继续对抓到的包进行分析,忽然我们发现

在这里插入图片描述
这个url可以获取我们需要的歌曲链接,于是我们对这个请求进行分析。
http://www.kuwo.cn/url?format=mp3&rid=6468891&response=url&type=convert_url3&br=128kmp3&from=web&t=1586271300049&reqId=c112db21-78df-11ea-a14f-953e08685b4b
对于这个请求地址,我们发现http://www.kuwo.cn/url?format=mp3&rid=这个是需要获取的&response=url&type=convert_url3&br=128kmp3&from=web&t=1586271300049&reqId=c112db21-78df-11ea-a14f-953e08685b4b
接下来我们明确了要获取的参数rid,那么rid哪里来呢?
我们继续往下分析
在这里插入图片描述
咦,这个和我们请求中的rid一样,那么我们就找到了获取参数rid的地方!!!!!!!
我们还可以发现通过http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=%E8%96%9B%E4%B9%8B%E8%B0%A6&pn=1&rn=30&reqId=c10ff4f0-78df-11ea-a14f-953e08685b4b这个url我们可以获取歌曲的列表,当当当,这时候我们是不是就联想到,可以进行对指定的搜索内容进行歌曲url的获取呢!!
接着我分析http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=%E8%96%9B%E4%B9%8B%E8%B0%A6&pn=1&rn=30&reqId=c10ff4f0-78df-11ea-a14f-953e08685b4b这个url
我们发现key=我们要搜索的关键词(请求时进行了编码),pn=要搜索的页数,rn=每页多少条数据其余的参数不管

六 实例

搜索指定歌手对指定页数进行爬取音乐下载到本地

import requests

search_url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn={}&reqId=c10ff4f0-78df-11ea-a14f-953e08685b4b"
get_song_url = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1586271300049&reqId=c112db21-78df-11ea-a14f-953e08685b4b"

header = {
			"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400",
			"Referer":"http://www.kuwo.cn/search/list?key=%E8%96%9B%E4%B9%8B%E8%B0%A6",
			"csrf":"OL8RJ2IMM2",
			"Cookie":"_ga=GA1.2.55450332.1582987284; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1583842435,1584019511,1584358122,1586270844; _gid=GA1.2.698376560.1586270844; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1586271144; kw_token=OL8RJ2IMM2"
		   }
		   
ret = requests.get(url.format("周杰伦", 1, 30), headers = header).json()
data = ret["data"]["list"]
for i in data:
	song_name = i["name"]
	song_url = kuwo_get_song_url(i["rid"])
	file = open("酷我音乐/{}.mp3".format(song_name), "wb")
	ret =  requests.get(song_url, headers = header).content
	file.write(ret)
	file.close()
	print(name, song_name)
	print("下载完成")

七 结语

至此这篇文章到此结束,我问题的小伙伴可以在下发留言,以上实例是一个很简单的流程,大家可以参考。