admin管理员组文章数量:1650872
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例:
- Java爬虫系列二:使用HttpClient抓取页面HTML
- Java爬虫系列三:使用Jsoup解析HTML
今天就来实战下,用他们来抓取酷狗音乐网上的 Top500排行榜音乐。接下来的代码中除了会用到HttpClient和Jsoup之外,还会用到log4j和ehcache,分别用来记录日志和实现缓存,如果看官对这两个不是很熟悉的话,请自行百度,现在网上的入门实例有很多,我就不专门记笔记了。
那为什么会想到爬取酷狗音乐网呢?其实也不是我想到的,而是不久前看过某位大神的博客就是爬取酷狗的(具体哪位大神不记得了,见谅哈~~~),我也想用自己的代码试试,并且我看的博客里面好像没有用到缓存,也没有用到代理ip这种反反爬虫的工具,我会在我的爬虫程序里面补上,亲测能自动处理全部23页的歌曲(但是付费歌曲由于必须登录购买才能访问,因此未能下载到,只有其他的400+首非付费歌曲可以正常下载),所以酷狗网的工作人员不要担心哦~~~
话有又说回来了,在那篇博客出来后,也没见酷狗音乐去专门处理下,还能给我留下写这段代码的机会,说明人家酷狗不在乎,毕竟付费歌曲是不能爬取的,而且网站已经有了一定的反爬虫机制。
***************************************************************************
声明:
本爬虫程序和程序爬取到的内容仅限个人学习交流使用,
请勿用于商业用途,否则后果自负
***************************************************************************
好,废话不多说,该上干货了~~
================很华丽的分割线=================
一、设计思路
首先说下思路,我看过的那篇博客没有把过程写详细,我就把它补充下吧:
1.点进去Top500排行榜,它的地址栏里面是:https://www.kugou/yy/rank/home/1-8888.html?from=homepage,而这个1其实就是页码,访问第N页就把1改成N就行,这个是我爬取的基础
2.点具体某首歌曲,比如《你的酒馆对我打了烊》,新打开页面:https://www.kugou/song/#hash=BE1E1D3C2A46B4CBD259ACA7FF050CD3&album_id=14913769,
3.我们F12分析下网络请求(啥?打开F12没东西?大哥呀你不会再刷新下吗),
你会发现有个耗时很长的请求,而且类型是media,它很可能就是真正获取mp3的请求
仔细看,果然是的,mp3的真实地址是:http://fs.w.kugou/201905272134/9d4d81230e6f5c759df51618b03961a7/G126/M00/05/09/HocBAFxLAoeAT3BzAD1nWyW7V5M814.mp3
关掉页面,重新进入该页面,MP3的真是地址是:http://fs.w.kugou/201905272139/2897cc9816b82f4cda304d927187b282/G126/M00/05/09/HocBAFxLAoeAT3BzAD1nWyW7V5M814.mp3
根据这个看不出来啥
继续分析,那它是怎么找到这个真实地址的呢?应该是前面的某个请求里面获取到了真实地址,找前面的请求:
这个请求的response里面含有MP3的真实地址,
请求的request为:
https://wwwapi.kugou/yy/index.php?r=play/getdata&callback=jQuery19106506492572547629_1558964792005&hash=BE1E1D3C2A46B4CBD259ACA7FF050CD3&album_id=14913769&dfid=3LWatj1PQwvn09grkH3FbFAF&mid=31adc5218ff6a510b05aacad71bc7090&platid=4&_=1558964792007
退出重新获取一次,然后再退出换首歌再获取一下这个request,你会发现一些规律:
粉红色是歌曲播放页面地址栏里面的内容,加粗部分是日期的long值,其他的都可以不变(“jQuery19106506492572547629_1558964792005”虽然每次有变化,但是经过尝试,其实没有影响),
所以我们就可以通过请求这个链接来获取带有MP3真实地址的json,然后请求真实地址,从而获取音乐文件。
4.那粉红色部分的值怎么获取呢?查看top500的列表页的源码会发现有段内容,这个里面记录的第N页所有歌曲的hash值、歌曲名、id等基本信息
// 列表数据
global.features = [{"Hash":"BE1E1D3C2A46B4CBD259ACA7FF050CD3","FileName"
版权声明:本文标题:Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729549381a1206034.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论