注:爬取网易云歌手数据,仅供学习与交流,无意侵犯。
因为近期文章末尾追加了网易云的单曲播放,心血来潮,想获取流行歌手的热门歌曲和网址链接,以便后期省去搜索单曲的冗余。“群众的眼睛是雪亮的”,一般而言,大凡歌手的前几名热门歌曲都是经得起群众的考验的,我随手一取,便是金曲。于是有了这篇爬虫入门文章。
进入网易云音乐网站首页,获取歌手链接。以歌手链接http://music.163.com/discover/artist 为种子,层次遍历,以歌手分类->歌手列表->歌手歌曲递进,层层深入,获取所有歌手歌曲链接。
http://music.163.com/discover/artist/ 进入歌手分类页,这里主要爬取【华语】和【欧美】的歌手歌曲。日本和韩国的歌曲就不爬了吧。主要还是要分析网页的结构化数据,以css选择器的方式获取链接数据。
通过分析可以得到这样的选择器 .g-sd2 .blk a
从而获取歌手分类链接。
进入歌手列表页后,发现歌手以字典序来排,其中热门链接页会以字典序页重复,记得排重处理。
通过分析,也可以得到这样的选择器 .g-wrap .n-ltlst.f-cb a
,从而获取到一个类的歌手列表。
进入类歌手列表后,要分析出歌手的歌曲列表链接。
通过分析,也可以得到这样的选择器 .m-sgerlist .nm.nm-icn.f-thide.s-fc0
,从而获取到歌手的歌曲列表链接。
进入歌手的歌曲列表页后,发现歌曲列表是以table表格页显示的,比较麻烦,但通过分析网页源码发现,竟然隐藏了一个歌曲列表,大赞。
通过分析,也可以得到这样的选择器 ul.f-hide a
,从而就可以获取歌曲名和相应的歌曲链接。而这个歌曲链接就可以作为本站的网易云的外链播放器播放啦。
在爬取分析的时候,发现网易云音乐并没有做严格的反爬机制,代理池,限频延时,自己看着办。本次采用Java语言编写,利用httpclient、jsoup
等jar包爬取分析,获取歌曲链接后存储到Excel,以歌手名为表头,对应的列为相应的歌曲链接和歌曲名。遇到js生成网页的部分,可能要用到浏览器模拟工具或者自动化测试工具,如httpunit、selenium
等等。效果图如下,
下面是截取的一些maven依赖:
- <!– https://mvnrepository.com/artifact/com.google.code.gson/gson –>
- <dependency>
- <groupId>com.google.code.gson</groupId>
- <artifactId>gson</artifactId>
- <version>2.7</version>
- </dependency>
- <!–
- <dependency>
- <groupId>commons-httpclient</groupId>
- <artifactId>commons-httpclient</artifactId>
- <version>3.1</version>
- </dependency>
- —>
- <!– https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient –>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>4.5.3</version>
- </dependency>
- <!– https://mvnrepository.com/artifact/org.httpunit/httpunit –>
- <dependency>
- <groupId>org.httpunit</groupId>
- <artifactId>httpunit</artifactId>
- <version>1.7.2</version>
- </dependency>
- <!– https://mvnrepository.com/artifact/org.jsoup/jsoup –>
- <dependency>
- <groupId>org.jsoup</groupId>
- <artifactId>jsoup</artifactId>
- <version>1.10.2</version>
- </dependency>
- <!– https://mvnrepository.com/artifact/commons-logging/commons-logging –>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.2</version>
- </dependency>
- <!– https://mvnrepository.com/artifact/commons-codec/commons-codec –>
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <version>1.10</version>
- </dependency>
- <!– https://mvnrepository.com/artifact/log4j/log4j –>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
- <!– https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml –>
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml</artifactId>
- <version>3.16</version>
- </dependency>
入门都是简单的,难能可贵的是坚持。发现自己爱打游击战了,没有一点方向。。。
参考
http://hc.apache.org/ httpclient
https://jsoup.org/ jsoup java版网页解析器
http://www.httpunit.org/ httpunit
http://www.seleniumhq.org/ selenium
发表评论