python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台

python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第1张图片
爬取七大平台歌曲的完整代码在git中的地址:https://github.com/wenjiankui/music_player
CSDN资源下载:我的下载资源中 “python爬取音乐”

一、系统环境

python3.7
Windows10x64
火狐浏览器(可以不装)

二、参考资料

python使用QT界面以及编程实现
firefox驱动geckodriver、Chrome驱动chromedriver-各个对应版本及下载地址
Python利用网易云音乐接口搭建的音乐推荐,根据单曲歌名推荐相关用户喜爱的歌曲
python爬取酷狗音乐
手把手教你使用Python抓取QQ音乐数据
python调用QT界面使用方法
python3.基础爬取网易云音乐
整合多家音乐网站(目前网易云/虾米/QQ音乐)的播放器(git代码)
Python 如何将项目打包成exe可执行程序

三、讲解爬取酷我音乐

1、打开酷我音乐官网
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第2张图片
2、按F12调出开发者工具,然后刷新网页
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第3张图片
3、找到获取搜索结果的请求地址
获取搜索请求
我这里直接给出了,至于为什么是它,是一个个的点击查看内容。根据经验来,有个小技巧,它名字里面一般带有“music”,“search”,“list”,等一些关键字,(当然也不绝对)
4、查看请求内容是否为我们想要的
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第4张图片
5、分析请求地址
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第5张图片
请求地址如下:

http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=%E5%B0%91%E5%B9%B4&pn=1&rn=30&httpsStatus=1&reqId=28576680-b9e4-11ea-8e6f-af9bc29f5d42

分析地址:

  • key={需要搜索的歌名}
  • rn={需要搜索的歌曲数量}
  • 所以在请求时将key个参数替换为自己想要搜索的歌名,其他不变,就能通过这个地址请求到搜索结果的返回。
  • 这里需要注意,构造请求的时候需要将headers加上,并将Referer字段中的key值替换为你需要搜索的歌曲名

第一步,获取搜索结果的请求地址就完成了

6、分析搜索返回的数据
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第6张图片
这样我们就获取到了需要的关键信息

  • 歌曲名称:name
  • 歌手名称:artist
  • 歌曲时长:songTimeMinutes
  • 歌曲id:rid

7、查找获取歌曲地址的请求
点击其中一首歌进行播放
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第7张图片
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第8张图片
这个地方的url就是歌曲的真正地址,可以直接复制该地址,在浏览器中打开

https://sz-sycdn.kuwo.cn/740375b0e3ea25aef233f854fb577bbe/5ef9b0fa/resource/n2/39/81/3430051340.mp3

8、分析请求地址
python爬取:网易云,QQ,酷狗,酷我,咪咕,虾米,千千静听七大音乐播放器平台_第9张图片

http://www.kuwo.cn/url?format=mp3&rid=81135985&response=url&type=convert_url3&br=128kmp3&from=web&t=1593422074605&httpsStatus=1&reqId=f2d8b0e0-b9e8-11ea-8973-8fc613f859bd

这个地址中rid值就是我们之前得到的rid参数,然后后面的很多参数不知道干嘛的,直接丢弃,最终我们可以用的地址为:

http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web

将rid中的参数替换为我们之前得到的rid,就能获取到对应的歌曲地址了。
这个时候我们就已经得到了我们想要的所有数据了

四、上代码

"""
酷我音乐下载
爬取关键点:
1、搜索歌曲的url:
    song_name:歌曲名
    pagesize:搜索数量
    'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={0}&pn=1&rn={1}&httpsStatus=1&reqId=d96418b0-adf5-11ea-a73f-a1f5bcc21a3f'.format(
        search_name, pagesize)

2、获取下载歌曲的url:
    song_id:歌曲id号
    "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web".format(
            song_id)

"""


from tkinter import *
import json
import requests


def kuwo_search_api(search_name):
    pagesize = "10"  # 请求数目
    # 添加提示
    url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={0}&pn=1&rn={1}&httpsStatus=1&reqId=d96418b0-adf5-11ea-a73f-a1f5bcc21a3f'.format(search_name, pagesize)
    # print(url)
    headler = {"Accept": "application/json, text/plain, */*",
               "Accept-Encoding": "gzip, deflate",
               "Accept-Language": "zh-CN,zh;q=0.9",
               "Connection": "keep-alive",
               "Cookie": "__guid=112476674.3591527979254065000.1592106672924.2986; _ga=GA1.2.797505084.1592106674; _gid=GA1.2.45950846.1592106674; _gat=1; radius=14.103.71.201; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1592106674,1592106743,1592108182; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1592108182; uudid=cms5df72a00-3b3e-b4c1-03b5-904d3a4dd6ba; kw_token=E5BXLYPPYS; monitor_count=12",
               "csrf": "E5BXLYPPYS",
               "Host": "www.kuwo.cn",
               "Referer": "http://www.kuwo.cn/search/list?key=".format(search_name),
               "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
    res = requests.get(url, headers=headler)  # 进行get请求
    # print(url)
    res.encoding = 'utf-8'
    res = json.loads(re.match(".*?({.*}).*", res.text, re.S).group(1))
    res = res["data"]["list"]
    # print(res)
    song_list_meesage = []
    i = 0
    # 遍历所有歌曲
    for item in res:
        buf = {}
        buf["song_name"] = item["name"]
        buf["song_user"] = item["artist"]
        buf["song_id"] = item["rid"]
        buf["song_time"] = item["songTimeMinutes"]
        i += 1

        # 以下根据歌曲id获取歌曲url和歌曲播放时间
        get_song_url = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web".format(
            buf["song_id"])
        res2 = requests.get(get_song_url)
        # print(res2.text)
        res2 = json.loads(re.match(".*?({.*}).*", res2.text).group(1))  # 同样需要用正则处理一下才为json格式,再转为字典
        # print(res2)
        buf["song_url"] = res2["url"]

        # 去除重复的歌曲
        song_find_flg = 0
        for song_find in song_list_meesage:
            if (song_find["song_name"] == buf["song_name"]) and (
                    song_find["song_user"] == buf["song_user"]):
                song_find_flg = 1

        if song_find_flg == 0 and len(buf["song_url"]) != 0:
            song_list_meesage.append(buf)
        # print(buf["song_name"], "  -  ", buf["song_user"], "  -  ", buf["song_time"], "  -  ", buf["song_id"])
        # print(buf["song_url"])
        # print("************************")
    return song_list_meesage

五、总结爬取过程

第一步:获取搜索歌曲列表的地址
第二步:在歌曲列表信息中找到关键参数rid
第三步:找到获取歌曲地址的请求
第四步:将之前获取的rid与第三步获取的地址进行组合,就能获得想要的歌曲地址

因为篇幅有限,本人也不是很擅长讲解,所以就讲解了一个爬取最简单的平台,由这个讲解入门音乐爬取,然后结合代码,其他平台的爬取也就不难理解了。
这里面最难的要属网易云音乐了,其实爬取流程都一样,主要难点在于多了一个数据加密,
关于七大平台的音乐爬取和界面逻辑代码比较多,但是理解起来也不难,代码中都尽量详细的写了注释。这里就不再讲解了,在使用代码前,请仔细阅读readme文档
有什么问题,欢迎大家留言,我会尽量的为大家解答。

你可能感兴趣的:(python)