“阅读本文仅需一分钟”
自从前年年底起所有的web端在线音乐全部一夜下降之后,今年网页版音乐又再度回到我们的视野。说是整改,需要将音乐资源屏蔽,许多音乐运营商都重构了代码,然而我还是禁不住用爬虫去试试,看看到底发爬虫到什么程度,但是结果令我大吃一惊。。。。。。网易云音乐压根没怎么去修改。。。但是他把歌曲的url地址隐藏了。。。。然后我们又想了很多办法去搞他。。。最后,爬虫代码照样还是通行无阻~~~~只不过在某个ip频繁访问请求后,他接口返回的是一串cheating code,但是只要是想去爬音乐还是没有问题。
俗话说得好:上有政策,下有对策。爬虫亦是如此。还记得我们常见的反反爬虫策略其中一个就算fake_useragent吧,这时候我们可以直接制定一个useragent,然后去down它的会员音乐资源~
废话不多说,我们赶紧进来看看,怎么去干TM的网易云音乐吧~
首先准备好需要使用的模块:
requests、bs4、urllib3
我们可以使用pip安装管理工具进行安装:
pip install xxx
然后使用:
import requestsfrom bs4 import BeautifulSoupimport urllib.request
首先我们来把请求的header部分填写好:
headers = {'Referer':'http://music.163.com/','Host':'music.163.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64;'
' x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/62.0.3202.75 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;'
'q=0.9,image/webp,image/apng,*/*;q=0.8',}
之后我们使用requests访问页面上的内容,
# 歌单的url地址
play_url = 'https://music.163.com/playlist?id={}'.format(411796573)
# 获取页面内容s = requests.session()
response=s.get(play_url,headers = headers).content
说明一下,我们这边下载的是歌单里面的内容,大家可以把歌曲收录到一个歌单,然后会生成一个歌单id,我们使用这个id把歌单拼出来。
如果你看到的url和这个不一样,可以按照这个url重新修改一下。
然后下面就算重头戏,找到歌曲的播放地址,然后把这首歌爬下来。
第一步打开网易云音乐,随便找到一首歌,播放,复制网址的ID, 例如:杨钰莹的心雨,网址是:
http://music.163.com/#/song?id=317151
很明显,ID是317151
那么,这首歌的真实地址就是:
http://music.163.com/song/media/outer/url?id=317151.mp3
这个地址不会失效的;
这就得到一个下载公式:
http://music.163.com/song/media/outer/url?id=ID数字.mp3
把上面红色部分ID数字换成网易云播放页面的id即可。
例如:
我们看到lemon的歌曲ID是536622304
那么它的歌曲实际地址就是:
http://music.163.com/song/media/outer/url?id=536622304.mp3
我们使用bs4匹配歌单里的所有歌曲,然后进行批量下载:
s = BeautifulSoup(response,'lxml')
main = s.find('ul',{'class':'f-hide'})
音乐的url拼接:
musicUrl =
'http://music.163.com/song/media/outer/url'+music['href'][5:]+'.mp3'
然后使用urlretrieve进行下载
urllib.request.urlretrieve(url,'./%s.mp3'% name)
我们运行代码可以看一看结果:
详细所有代码已经上传到github,大家如果感兴趣,可以去github看看,动手尝试尝试,顺便提一些修改意见。
GitHub地址:
https://github.com/johnturingwu/music163
点击阅读原文也可以直达哦!
感谢!
“扫一扫,关注你想要的”