Scrapy爬取网易云音乐和评论(四、关于API)

2017-11-30  本文已影响0人  苏酒酒

目录:

1、Scrapy爬取网易云音乐和评论(一、思路分析)
2、Scrapy爬取网易云音乐和评论(二、Scrapy框架每个模块的作用)
3、Scrapy爬取网易云音乐和评论(三、爬取歌手)
4、Scrapy爬取网易云音乐和评论(四、关于API)
5、Scrapy爬取网易云音乐和评论(五、评论)

前面有提到,API的参考链接,另外再放上几个,

1、http://moonlib.com/606.html(我用的这个)
2、http://blog.csdn.net/qujunjie/article/details/34422379
3、https://binaryify.github.io/NeteaseCloudMusicApi/#/?id=neteasecloudmusicapi(这个比较官方,我也不知道是不是官方,但是很全很全很全)

我们爬取的顺序是:

1、歌手专辑
2、专辑信息(不包括评论)
3、歌曲信息(不包括评论)
4、歌词
5、专辑和歌曲评论(这个另起一章写)

我们拿一个来讲解,其他的类似:
比如,歌手专辑:

http://music.163.com/api/artist/albums/166009?id=166009&offset=0&total=true&limit=12
image.png

我的那个get_req()函数就是对requests.get做了些处理,中途肯定会遇到各种各样的状态码对吧,这个你们自己去思考。

这里我没有用response,因为不涉及到一个完整的传递链,它只是要存进数据库的某一个字段,如图,这个才是我要进行存储的的函数,其中调用了get_artist_album_info()这个函数,它只是作为一个字段存进了item。

其中调用了get_artist_album_info()这个函数,它只是作为一个字段存进了item。

然后回到get_artist_album_info()函数,这里的建议就是,将固定的不变,会变的用params这个参数,requests.get它后面可以传各种参数,包括params,以及前面的headers。

这个params里有四个参数:

# album_count是一个歌手所有专辑的总数
# 获得的方法可以先爬第一页的json数据,或者别的你们自己找
for offset in range(0,album_count,12):
    params = {
        'id':singer_id,
        'offset':offset,
        'total':'true',
        'limit':12
    }

API

以此类推,其他到底都是这样了,这里把http://moonlib.com/606.html的API集中写一下,method都是GET:
1、歌手专辑:

# 歌手专辑:
# 三种写法,随意,推荐第三种,后面都是
1、http://music.163.com/api/artist/albums/[artist_id]/
2、http://music.163.com/api/artist/albums/166009/id=166009&offset=0&total=true&limit=5
3、url='http://music.163.com/api/artist/albums/166009'
params = {....}

2、专辑里的歌曲列表

# 专辑里的歌曲列表
http://music.163.com/api/album/2457012?ext=true&id=2457012&offset=0&total=true&limit=10

3、歌曲信息

# 歌曲信息
# 这里说明一下,%5B和%5D就是一对中括号[],最好改成[],像歌手专辑里第一种写法那个一样,因为%5B那种写法还要处理,且麻烦。
http://music.163.com/api/song/detail/?id=28377211&ids=%5B28377211%5D

4、歌词信息

# 这个跟其他都不一样,后面的lv、kv、tv是固定的,只要改id即可。
http://music.163.com/api/song/lyric?os=pc&id=93920&lv=-1&kv=-1&tv=-1
上一篇下一篇

猜你喜欢

热点阅读