按照学校项目要求,想做一个资源分享的开放论坛,首先想到了音乐资源。由于版权的问题所以不能直接爬取音乐文件本身,所以采取了一种折中的方案,爬取音乐相关数据,如播放量、评分、简介等等。最后考虑到目前对相关算法的知识了解地不是很深,不能熟练地进行相关数据的筛选工作,故只爬取了相关榜单的信息作为本次项目的数据参考,不得不说也是一种遗憾的事。
这里request主要是用于请求访问网页,以获得网页相关信息;re是正则表达式,主要是用于爬取与正则表达式相匹配的信息的相关网页内容
打开酷狗音乐的一些榜单,我们会发现这些歌单都有这样的一些特征:
我们会发现,这些榜单最主要的就是中间榜单的ID名称不同,所以我们想爬哪些榜单,就可以将它们的榜单ID打包起来
使用循环保证列表里面的每一个歌单都能被访问
这里我们使用了f‘’(format)格式化输出,这样代码简洁方便
因为爬虫需要将自己伪装成一个浏览器才能获取到更多信息,所以我们需要将爬虫伪装成一个浏览器,右键,打开谷歌浏览器的检查工具
注意标头中的user-agent内容
这就是我们需要的内容了,它反映了我们浏览器的相关属性,我们就可以让爬虫模拟这样一个浏览器来进行数据访问及爬取了
在有了这些之后,爬虫就可以开始访问网页了
这里我们使用了requests包中的get函数,请求指定的页面信息,并返回页面主体
切回元素页面,我们首先注意到榜单的标题:
继续往下看,发现榜单是以无序列表的形式排列的
详细点进去,我们会发现:
每首歌曲的名称位于
class="pc_temp_songname" title="" hidefocus="true">
故针对歌曲名称的爬取,我们采用re包里的findall函数,匹配到相应字符之后返回一个包含所有满足条件字符的列表,关于爬取的数据我还做了一个解码工作,只解码用‘utf-8’编码的数据,防止最后返回的数据是乱码,同时这里还用了r‘’这样的转义字符,就是为了防止一些相关的符号如‘\’被python解释器误认为是换行符,从而使获得的数据有误故爬取歌曲名称的代码如下:
(.?*)分别表示匹配任意1个字符(除了\n);匹配前⼀个字符出现0次或者无限次,即可有可无;匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有。这样一来,HTML标签里的所有可能的字符都包含进去了
每个榜单的名称位于<title></title>之间
故爬取榜单名称的代码如下:
困难在爬取的过程中暂时没有遇到,不过关于爬取出的数据的整理,我下次会考虑使用Excel表单的形式,这也是我下一步优化的方向。
以上就是关于酷狗音乐榜单的数据爬取,相信我能够从这次的经历中收获不少。同时感谢小组中每一个人的辛勤付出。