网易云音乐歌词python

本文介绍如何利用Python爬取网易云音乐中指定用户的评论。通过获取用户喜欢的歌曲或歌单,分析并利用网易云音乐的API,作者克服了频率限制和缺少个人听歌排行API的问题,编写了相关Python脚本,包括获取歌单列表、歌曲评论等。
摘要由CSDN通过智能技术生成

网易云指定用户评论抓取2017

暑假在校,突发奇想,网易云好像没有一个汇总自己或者别人所有评论的功能,即获取指定用户所有评论,为什么不能有呢?那么自己动手呗。

准备工作:

首先呢,要获取指定用户的评论数据,我的思路是首先得到他/她喜欢的歌曲,或者ta的歌单,因为在喜欢的歌下面评论的概率是最大的。获取数据肯定是现成的api好用,有很好的格式例如json,牛人总是有的,大部分的api都有人给出了,以下给出参考的网址。

网易云音乐api知乎答案
网易云音乐api整理
网易云音乐API分析

实际实现中的问题:

1.频率过高导致运行不久就被封了ip:通过不断改变请求延迟和user_agent,达到不被封ip的持久爬取,但速度相对很慢。
2.没有找到现成的个人听歌排行歌曲列表的api:通过自己分析网页请求得到

代码(python 3.5):
综合的add_on.py
import pickle
import get_search,get_songlist,timed_input

#给出需要寻找的用户名
username=''
all_songs_id={}#存放需要搜寻的用户歌曲id

userid,userdict=get_search.get_uid(username)#获得用户id和包含所有信息的dict

play_list=get_songlist.get_playlist(userid)#获得用户所有歌单id的字典:歌单名:id

for playlistname in play_list:
    #print(get_search.get_songid(playlistid))
    all_songs_id[playlistname]=get_search.get_songid(play_list[playlistname])

#这里我没有一次行爬取所有歌单的歌词,而是挑选了某个感兴趣的歌单
for item in [all_songs_id['感兴趣的歌单名称']]:
    for song in item:
        permision=timed_input.timedInput('是否进行(输入q退出否则进行)---> '+song[0],'y')
        if permision==('y' or 'yes'):
            print('进行---> ',song[0])
            get_songlist.get_all_comments(song[0],song[1],username)
        if permision=='q':
            break
通过简单的get命令获得歌单列表和歌名列表的api文件,get_search.py
import requests
import json,sys,io

def get_uid(username):    
    headers = {
        'Cookie': 'appver=1.5.0.75771;',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
        'Referer': 'http://music.163.com/'
    }

    url = "http://music.163.com/api/search/pc"
    data = {
         "s": username,
         "offset": '0',
         'limit':'20',
         'type':'1002'
    }
    response = requests.post(url, headers=headers, data=data)
    jsondatadict=json.loads(response.text)#有resutl和code两个键
    resultdata=jsondatadict['result']['userprofiles']
    for item in resultdata:
        if item['nickname']==username:
            print('-成功找到:',item['nickname'],' -ID号为:',item['userId'],'-粉丝数:',item['followeds'])
            return item['userId'],item#返回用户id和包含用户所有信息的dict

#存在一次只能获
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值