跟我一起学-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("下载完成")
七 结语
至此这篇文章到此结束,我问题的小伙伴可以在下发留言,以上实例是一个很简单的流程,大家可以参考。