用爬虫获取网易云音乐热门歌手评论数

本文介绍了一个Python爬虫项目,用于获取网易云音乐热门歌手的热门单曲评论数。通过分析网页结构和使用requests、BeautifulSoup等模块,实现从歌曲ID到评论数的抓取,同时解析歌手ID和热门单曲ID。最终,博主通过整合代码,统计了热门歌手的总评论数。
摘要由CSDN通过智能技术生成

转载请注明作者和出处:http://blog.csdn.net/Monkey_D_Newdun

运行平台:Windows 10

IDE:Pycharm

Python版本:3.6.0

浏览器:Chrome


  • 前言
  • 所需模块
  • 步骤解析
  1. 爬取歌曲评论数
  2. 爬取热门歌手ID
  3. 爬取歌手热门单曲ID
  4. 总体代码
  • 总结


1.前言

       刚开始学Python和爬虫,由于也是网易云音乐的忠实用户,所以就想做一个网易云音乐的爬虫。本来想做一个爬取所有歌曲评论数的爬虫,发现已经有大佬写过了,并且爬取5亿多首歌评论数的工作量也有点大,所以就改做爬取当下各热门歌手每首热单的评论数,再统计一下各位歌手热单的评论总数。由于每位歌手的TOP50单曲已经集中了其绝大多数评论,所以可以近似当作他们所有歌曲的评论总数。(由于这是我第次一写博客,且刚开始学Python和爬虫所以用语上可能有些错误)

2.所需模块

        urllib、BeautifulSoup、request、requests、re、json

3.步骤解析

3.1爬取歌曲评论数

    进入到一首歌曲的详细页面,可以看到歌曲的ID,比如《等你下课》的ID是531051217,直接尝试使用BeautifulSoup对链接“http://music.163.com/#/song?id=531051217”进行解析,发现找不到评论信息

       

      这是因为网易对评论数据采取的是异步传输,所以不能直接通过解析网页内容得到评论数据。打开Chrome开发者工具(Fn+f12)观察,发现奥秘在一个名为“R_SO_4_531051217?csrf_token=”的POST请求中,如下图


    其中R_SO_4_后面的数字531051217为当前歌曲的ID,再观察所上传数据可以看到这里上传了两个参数:params、encSecKey,经过测试发现两个参数对每首歌都是通用的。也就是说将上面链接的歌曲ID替换后传入该参数也能获得数据


     再观察服务器所返回的数据可知评论数保存在“total”中,其中“comments”存的是评论内容,“hotComments”存的是热门评论内容,如果想扒一扒评论内容就可以从这里获取。注意这些是JSON数据,到时候要解析一下


代码部分

#-*-coding:UTF-8-*-

from urllib import request
from bs4 import BeautifulSoup
import requests
import json
import re
from urllib import parse

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36"}

def comment_count(song_id):
    url="http://music.163.com/weapi/v1/resource/comments/R_SO_4_"+song_id+"?csrf_token="
    data = {
        "params": "nHfVBsNbW+WCrz7pAbdaq4uW2+4kADa+gNEfGWK7M5n36mWvsmGXsM2KzVUAeR62mhYlsSvc23I58
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值