python爬取网易云音乐热歌榜单(获取iframe中数据,src为空)

一.分析思路

网易云音乐热歌榜的页面采用嵌入内联框架的方式,若爬虫直接从官网入口进入访问热歌榜
http://music.163.com/#/discover/toplist?id=3778678,是无法获取到iframe框架内的数据的,因此应当用另外的方法进行访问。当然最简单的方法可以用selenium+chrome的方式进行获取数据(使用switch_to.frame方法,网上有很多教程)。

第二种方法采用分析api的方式进行,内嵌的框架实际上也是一个网页资源,因此只要我们找到它的链接,然后获取到这一页面,自然也能获取到数据。本文采取此方式进行分析和编写程序。

二.分析需求

获取热歌榜上所有歌曲名称,以及歌手,歌曲时长,专辑等信息。

三.使用chrome开发工具分析页面

1.打开网易云音乐热歌榜页面,按下F12,打开chrome的开发者工具,找到iframe元素,发现其src为空,并且可以看到iframe中的内容是使用javascript生成的:

image.png

2.因此我们需要分析api找到我们所需的链接。再选择network,选择Doc,然后重新加载界面,发现文件有两个:


python爬取网易云音乐热歌榜单(获取iframe中数据,src为空)_第1张图片
image.png

3.分别在这两文件的response中搜索榜单上的任意一首歌,发现榜单在第二个document中:

python爬取网易云音乐热歌榜单(获取iframe中数据,src为空)_第2张图片
image.png

4.右键这一Doc,选择copy/copy link address获取 内嵌框架的链接。
5.用此链接另外打开一个界面发现界面又跳回原来的页面,因此我们在原来的网页右击选择查看框架源代码,搜索后发现榜单数据是以json的格式存在