music163-spiders

by zyingzhou

zyingzhou / music163-spiders

网易云音乐歌曲评论爬虫

209 Stars 113 Forks Last release: Not found MIT License 37 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

网易云音乐爬虫

一,获取全部歌手的id号

网易云音乐使用了内联框架,除网站的主框架外,其他内容都是嵌在子网页当中,如果直接使用 requests 库是无法爬取到我 们想要的内容的,因此我们需要使用 selenium 的 switchtoframe()方法来切换到子网页中,这时获取的网页源代码才包含我们需要的内容.详细的爬取思路大家可以参考我的这篇文章网易云音乐评论爬虫(二):爬取全部热门歌曲及其对应的id号 爬取入口是:https://music.163.com/#/discover/artist

二,通过歌手id号爬取全部歌手的每一首热门歌曲的id号

一种方法爬取思路同上。另一种方法是直接爬取嵌在iframe里面的子页面(控制面板--Sources--contentFrame--域名文件夹下可找到)。 爬取子frame

三,爬取全部歌手的每一首热门歌曲的全部评论

由于网易云音乐的歌曲评论是通过Ajax进行加载的,而且加载过程还对参数进行了js混淆加密,使得爬取歌曲全部评论变得困难.笔者对加密过程详细分析之后得出了它的 加密过程:两次 AES 加密得到 params 参数的值,RSA 加密得到 encSeckey 的值.然后使用 Python 进行相应的加密得到对应的参数, 利用得到的加密参数发起带 data的post请求即可获得含有歌曲评论的json格式的数据.详细爬取思路分析请参考:网易云音乐评论爬虫(三):爬取歌曲的全部评论

四,网易云音乐歌手粉丝地域分布热力图

制作网易云歌手粉丝地域分布热力图,我把它分为两个步骤:1.获取歌手全部的粉丝信息 2.制作歌手粉丝地域分布的热力图

1.获取歌手全部的粉丝信息

在歌手的个人主页,我们可以找到粉丝数据(通过Ajax进行加载),这些数据是进行了加密的,加密方式同歌曲评论的加密方式,加密方式的分析请参考:网易云音乐评论爬虫(三):爬取歌曲的全部评论,只要分析出其中变量的变化规律即能获取到这些数据。 再通过粉丝的id号,爬取粉丝个人主页中的地理位置信息。

2.制作歌手粉丝地域分布的热力图

由于上一步获取到的位置是城市编码,因此我们需要将城市编码转换为中文的位置信息,再通过百度的API将位置转换为经纬度,使用百度API需要先获取服务密钥(ak),最后把经纬度,同一个地方的粉丝 数量按字典格式插入到热力图的模板HTML代码中去!热力图的H5模板文件格式:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&amp;ak=%E8%BF%99%E9%87%8C%E5%A1%AB%E5%86%99%E4%BD%A0%E7%9A%84%E7%99%BE%E5%BA%A6%E6%9C%8D%E5%8A%A1%E5%AF%86%E9%92%A5%EF%BC%88ak%EF%BC%89"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>
<title>热力图功能示例</title>
<style type="text/css">
    ul,li{list-style: none;margin:0;padding:0;float:left;}
    html{height:100%}
    body{height:100%;margin:0px;padding:0px;font-family:"微软雅黑";}
    #container{height:500px;width:100%;}
    #r-result{width:100%;}
</style>


<div id="container"></div>
<div id="r-result">
    <input type="button" onclick="openHeatmap();" value="显示热力图"><input type="button" onclick="closeHeatmap();" value="关闭热力图">
</div>

我们生成的字典数据({"lat":23.043023815368237,"lng":113.76343399075655,"count":204})只需要一个一个插入到point列表中去就行, 字典格式为{"lat": 纬度, "lng": 经度, "count":这个地理位置的粉丝数量}。最后把这个HTML文件在浏览器中打开,再点击显示热力图,缩放地 图便能看到歌手粉丝地域分布的热力图。以薛之谦为例,我们来看一下他的部分粉丝地域分布的热力图:薛之谦粉丝地域分布热力图

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.