前言

之前刚刚入门python爬虫,有大概半个月时间没有写python了,都快遗忘了。于是准备写个简单的爬虫练练手,我觉得网易云音乐最优特色的就是其精准的歌曲推荐和独具特色的用户评论,于是写了这个抓取网易云音乐热歌榜里的热评的爬虫。我也是刚刚入门爬虫,有什么意见和问题欢迎提出,大家一起共同进步。

废话就不多说了~下面来一起看看详细的介绍吧。

我们的目标是爬取网易云中的热歌排行榜中所有歌曲的热门评论。

这样既可以减少我们需要爬取的工作量,又可以保存到高质量的评论。

实现分析

首先,我们打开网易云网页版,如图:

Python3实战之爬虫抓取网易云音乐的热门评论

点击排行榜,然后点击左侧云音乐热歌榜,如图:

Python3实战之爬虫抓取网易云音乐的热门评论

我们先随便打开一个歌曲,找到如何抓取指定的歌曲的热门歌评的方法,如图,我选了一个最近我比较喜欢的歌曲为例:

Python3实战之爬虫抓取网易云音乐的热门评论

进去后我们会看到歌评就在这个页面的下面,接下来我们就要想办法获取这些评论。

接下来打开web控制台(chrom的话打开开发者工具,如果是其他浏览器应该也是类似),chrom下按F12,如图:

Python3实战之爬虫抓取网易云音乐的热门评论

选则Network,然后我们按F5刷新一下,刷新之后得到的数据如下图所示:

Python3实战之爬虫抓取网易云音乐的热门评论

可以看到浏览器发送了非常多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状态码做一个初步的判断,status code(状态码)标志了服务器请求的状态,这里状态码为200即表示请求正常,而304则表示不正常(状态码种类非常多,如果要想详细了解可以自行搜索,这里不说304具体的含义了)。所以我们一般只用看状态码为200的请求就可以了,还有就是,我们可以通过右边栏的预览来粗略观察服务器返回了什么信息(或者查看响应)。通过这两种方法结合一般我们就可以快速找到我们想要分析的请求。通过反复的查找,终于找到了含有歌评的请求,如图:

Python3实战之爬虫抓取网易云音乐的热门评论

可能截图在CSDN上不是很清楚,我们在一个Name为R_SO_4_489998494"text-align: center">Python3实战之爬虫抓取网易云音乐的热门评论

请求头部:

Python3实战之爬虫抓取网易云音乐的热门评论 

请求中的表单数据:

Python3实战之爬虫抓取网易云音乐的热门评论

我们可以看到,包含这首歌歌评的请求url为http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494"text-align: center">Python3实战之爬虫抓取网易云音乐的热门评论

至此,我们已经确定了方向了,即只需要确定params和encSecKey这两个参数值即可。但是这两个参数是经过特定的算法进行加密的,怎么办呢?我发现了一个规律,http://music.163.com/weapi/v1/resource/comments/R_SO_4_489998494"text-align: center">Python3实战之爬虫抓取网易云音乐的热门评论

按F12,进入WEB工作台,如图:

Python3实战之爬虫抓取网易云音乐的热门评论

我们在一个名为toplist"text-align: center">Python3实战之爬虫抓取网易云音乐的热门评论

我们预览一下该请求返回的结果,如图:

Python3实战之爬虫抓取网易云音乐的热门评论

我们在代码的第524行我们找到了包含歌曲信息的代码,如图:

Python3实战之爬虫抓取网易云音乐的热门评论

因此,我们只需要将该请求的代码中,将包含信息的代码筛选出来。

我们在这里使用正则表达式进行数据筛选。

通过观察特点,我们可以通过两次正则表达式的筛选,将我们需要的歌曲信息提取出来。

第一次正则表达式我们将该请求返回的所有代码中,提取出第525行代码。

第一次正则表达式如下:<ul class="f-hide"><li><a href="/song\" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >.*</a></li></ul>

第二次正则表达式我们将该第524行中我们需要的歌曲信息提取出来,我们需要歌曲的歌名和id,对应的正则表达式如下:

获取歌名:<li><a href="/song\" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >(.*"/song\" rel="external nofollow" rel="external nofollow" >.*"color: #ff0000">代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import re
import urllib.request
import urllib.error
import urllib.parse
import json



def get_all_hotSong():  #获取热歌榜所有歌曲名称和id
 url='http://music.163.com/discover/toplist"f-hide"><li><a href="/song\">.*</a></li></ul>' #进行第一次筛选的正则表达式
 result=re.compile(pat1).findall(html)  #用正则表达式进行筛选
 result=result[0]  #获取tuple的第一个元素

 pat2=r'<li><a href="/song\">(.*"/song\">.*"text-align: center">Python3实战之爬虫抓取网易云音乐的热门评论

对比一下网页上《如果我爱你》这首歌的歌评和我们保存下的歌评:

Python3实战之爬虫抓取网易云音乐的热门评论

Python3实战之爬虫抓取网易云音乐的热门评论

信息无误~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。