跟我一起学-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("下载完成")
七 结语
至此这篇文章到此结束,我问题的小伙伴可以在下发留言,以上实例是一个很简单的流程,大家可以参考。
- 跟我一起学Python之六:列表
- python中将两组数据放在一起按照某一固定顺序shuffle
- 和我一起学python,控制语句 (life is short ,we need python)
- TurnipBit:可以带着孩子一起玩编程的MicroPython开发板!
- Hello,Python!一起学Python之例题计算(十二)
- 一起学python(四)
- 【我们一起自学Python】-转载:python 3 操作 excel
- 跟我一起学python(二),python基本数据类型
- 《与小卡特一起学Python》Code1
- 【和我一起学python吧】python入门语法总结
- 我们一起学python-helloworld2
- 【和我一起学python吧】Python 启航
- 【我们一起学Python吧】每日一题
- 【跟我一起学Python吧】Python解释执行原理
- 跟我一起学Python之五:序列
- 一起学Python:tcp服务器
- Hello,Python!一起学Python之文件操作,读取与储存(九)
- [和小菜鸡一起刷题(python)] LeetCode 131. 分割回文串 (Palindrome Partitioning)
- 一起学Python——数据类型详解
- 和我一起使用Python的bottle来实现文件的上传和下载(使用post方法)