网易云API使用

1. 前情提要:

昨天爬虫结果很失败,由两点导致:

首先是得到的20万歌单中大概只有十分之一在第一次访问API接口时好用,

其次我写JSON出了问题,检查后发现只能访问每首歌单的第一个歌。(太菜了逃

2. 解决:

第一步:

首先在昨天的方法上改进,重写JSON的访问格式

这是访问一首歌单的简洁写法(不包括多线程,时间戳那些)

import requests

headers = {
    .....
}
id = "5104664972"
url = "http://music.163.com/api/playlist/detail?id=" + id
playlist_json = requests.get(url, headers=headers).json()
for item in playlist_json.get('result').get('tracks'):
    music_id = item['id']
    music_name = item['name']
    print(music_name)

这样就可以在原来的基础上将API里面的歌曲都得到了~歌曲数增加了十倍!

第二步:

但是还不太行,由于网易云网页版的改版,Web端无法查看全部歌单内容了,只能在客户端查看,因此,限制在每张歌单10首歌,只能想新办法...==

这样的话就用NeteaseCloudMusicApi吧....班长口中的大招

3. NeteaseCloudMusicApi使用方法

参考文档

第一步:API搭建启动

用git将GitHub上的这个项目克隆下来

  • 首先安装NodeJS 8.12+ 环境(这个我之前安装过,可以通过敲node看看有没有回应)
  • 克隆地址:项目所在github地址

    git clone https://github.com/Binaryify/NeteaseCloudMusicApi
  • 在NeteaseCloudMusicApi文件夹下输入以下命令:npm install
  • 直接运行node app.js运行项目。
node app.js    

这是服务的默认端口是3000,浏览器访问http://localhost:3000/即可

成果图片

第二步:使用

首先要登录,否则只能看到部分结果,手机登录要访问/login/cellphone?phone=xxx&password=yyy

也就是如果仍然是默认3000端口就浏览器http://localhost:3000/login/cellphone?phone=xxx&password=yyy

再用http://localhost:3000/login/status查看登录状态

如果成功,这时就可以访问全部结果了~

因为我已经有歌单id,要查看对应的歌单信息就将之前的链接改为

url = "http://localhost:3000/playlist/detail?id=" + id

即可~

代码:

还是要判断是否为空值,再改改JSON即可

f = open("list.txt",'r+')
data1 = f.readlines()
with open('ans3.txt','w') as fi:
    for i in range(len(data1)):
        id = data1[i]
        print(id)
        url = "http://localhost:3000/playlist/detail?id=" + id
        res = requests.get(url,headers=headers).json()   #把爬取到的json格式的网页转换成字典格式
        if res.get("playlist") != None:
            if res.get("playlist").get('trackIds') != None:
                for item in res.get('playlist').get('trackIds'):
                    fi.write(str(item['id']))
                    fi.write('\n' + str(len(res.get('playlist').get('tags'))) + '\n')
                    print(item['id'])
                    print(len(res.get('playlist').get('tags')))
                    if res.get("playlist").get('tags') != None:
                        for item in res.get('playlist').get('tags'):
                            fi.write(item + ' ')
                            print(item)
                        fi.write('\n')

可以实时查看运行状态~

日志

很方便...不过要研究原理才是正道!

Last modification:August 11th, 2020 at 01:06 pm
请赏我杯奶茶,让我快乐长肉