专栏首页Python与Excel之交手把手教你爬取某酷音乐付费歌曲~

手把手教你爬取某酷音乐付费歌曲~

爬取酷我音乐相比网易云音乐、酷狗音乐以及QQ音乐来说容易很多,没有加密算法,而且在反爬虫中不存在一些难理解的逻辑,只需要理清思路即可!本文会用爬虫+GUI制作酷我音乐下载工具

GUI编写思路

本文的爬虫程序是根据下面的GUI界面进行封装的,GUI创建是使用PySimpleGUI库:

所以GUI制作思路是这样的:

  • 通过搜索框搜索歌曲名称或者歌手,取得歌曲的名称等信息,通过信息展示框进行展示以及传入歌曲选择框中。
  • 在歌曲选择框中输入歌曲信息或者选择要保存的歌曲,然后点击Button按钮保存。
  • 点击保存按钮会出现一个弹框,可以选择音频数据保存的路径。
  • Button按钮退出程序直接结束工具的运行。

根据设计图以及思路得到下面代码:

# 主题设置
sg.theme('BrownBlue')  # BrownBlue  LightBrown3

# 布局设置 类似网页前端代码
layout = [ # 搜索框布局  Text:文本  Combo:输入框 tooltip:鼠标移动到输入框显示的内容 size:输入框宽度 Button:按钮 key:唯一标识
     [sg.Text('请输入搜索的歌曲或歌手:', font=("微软雅黑", 12)),
           sg.Combo(values='', tooltip='请输入搜索的歌曲或歌手:', font=("微软雅黑", 10), default_value='', auto_size_text=True,
                    size=(70, 0), key='keys'), sg.Button('搜索', font=("微软雅黑", 12))],
    # 歌曲选择框布局
          [sg.Text('请选择或输入要保存的歌:', font=("微软雅黑", 12)),
           sg.Combo(values='', tooltip='请选择或输入要保存的歌:', font=("微软雅黑", 10), default_value='', auto_size_text=True,
                    size=(70, 0), key='value'), sg.Button('保存', font=("微软雅黑", 12))],
    # 信息展示框  Output:输出元素 
          [sg.Text('信息展示:', justification='center')],
          [sg.Output(size=(100, 10), font=("微软雅黑", 10))],
    # 退出程序按钮
          [sg.Text('', font=("微软雅黑", 12), size=(73, 1)),sg.Button('退出程序', font=("微软雅黑", 12))]
          ]
# 创建窗口
window = sg.Window('酷我音乐下载器', layout, font=("微软雅黑", 12), default_element_size=(80, 1))

# 事件循环 类似网页后端代码
while True:
    event, values = window.read()
    # 点击退出程序按时结束事件循环
    if event in (None, '退出程序'): 
        break

window.close()

GUI布局完成,后面只需要编写爬虫以及在事件循环中增加相关后端代码即可!

爬虫编写思路

根据GUI结构,我们需要一个搜索功能,这里直接在酷我音乐首页搜索框搜索音乐抓包,拿到搜索框搜索内容的ap:i

得到url:

http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key=%E6%AF%9B%E4%B8%8D%E6%98%93&pn=1&rn=30&httpsStatus=1&reqId=705d4d00-cd07-11eb-bb69-59cd8661b1da

其中key是搜索的内容,pn是页码,rn是数据的条数,reqId没看出来,但不要紧,不影响操作。url的参数基本了解了,其中修改key值即可获取不同歌曲数据,最终得到data_text()函数。

def data_text(key):
    global headers # 后面需要用到,设置为全局变量
    keys = urllib.parse.quote(key) # 把得到的key转化为电脑看得懂的符号
    headers = {
        'Cookie': '你的cookie',
        'csrf': 'GVDHKPAN1HS',
        'Host': 'www.kuwo.cn',
        'Referer': f'http://www.kuwo.cn/search/list?key={keys}',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
    }
    url_rid = f'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={keys}&pn=1&rn=30&httpsStatus=1&reqId=8468f010-a011-11eb-9364-1b542cb8c9e7Request Method'
    return url_rid

虽然得到了该url,但我们还不知要从url中提取哪些内容;所以我们需要进入下一页面,继续抓包,找到上一条url和下一条url的关联性。

随便点击任意一首歌曲,当然,付费歌曲是无法在网页上播放的,但酷我音乐的付费内容和免费内容都是用一条链接的,所以播放免费歌曲进入播放页:

在播放页抓包,成功找到包含MP3格式的数据包,得到url:

http://www.kuwo.cn/url?format=mp3&rid=28501751&response=url&type=convert_url3&br=128kmp3&from=web&t=1623690057540&httpsStatus=1&reqId=168e5e60-cd32-11eb-ba7a-a1bfcaa82f84

经过测试,只需要url中的参数rid发生变化即可获取不同的歌曲,最后获得MP3url_rid()MP3_URL()函数:

def MP3url_rid(url_rid):
    data = []
    rid_response = requests.get(url_rid, headers=headers).json()
    lists = rid_response['data']['list']
    for i in lists:
        time.sleep(2)
        name = i['name']  # 歌名
        artist = i['artist']  # 歌手
        rid = i['rid']  # id值
        data.append([name, artist, rid])
        print(name, artist, rid, sep=' | ')
    # 传入到歌曲选择框选择
    window["value"].Update(values=data, font=("微软雅黑", 10), size=(15, 8))

def MP3_URL(file_s, name, artist, rid):
    url_mp3 = f'http://www.kuwo.cn/url?format=mp3&rid={rid}&response=url&type=convert_url3&br=128kmp3&from=web&t=1618728266452&httpsStatus=1&reqId=849a8760-a011-11eb-9364-1b542cb8c9e7'
    url_response = requests.get(url=url_mp3, headers=headers).json()
    mp3_url = url_response['url']
    mp3_name = name + '_' + artist + '.mp3'
    print(mp3_name)
    # 传入保存函数进行保存
    save(file_s, mp3_name, mp3_url)

条件循环

在事件循环中加入点击搜索按钮和保存按钮所触发的事件:

if event == '搜索':
    if values['keys']:
     # 接收搜索框内容
        key = values['keys']
        # 传入函数
        url_rid = data_text(key)
        MP3url_rid(url_rid)
        print('搜索完成, 请选择要下载的歌曲!')
        # 弹窗
        sg.popup('搜索完成, 请选择要下载的歌曲!')
    else:
        print('歌曲或歌手未输入!')
        sg.popup('歌曲或歌手未输入!')

if event == '保存':
    if values['value']:
     # sg.popup_get_folder() 弹窗的一种,接收的是文件路径
        files = sg.popup_get_folder('请选择存储路径:')
        # 接收MP3url_rid()函数内容
        mp3data = values['value']
        q = mp3data[0]
        w = mp3data[1]
        e = mp3data[2]
        MP3_URL(files, q, w, e)
        print('下载完成!')
        sg.popup('下载完成!')
    else:
        print('未选择或者输入歌曲!')
        sg.popup('未选择或者输入歌曲!')

运行示例,最后可以用pyinstaller进行程序代码打包:

本文分享自微信公众号 - Python与Excel之交(Yi-Python-Excel),作者:锋小刀

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一篇文章教会你使用Python网络爬虫下载酷狗音乐

    现在的听歌软件动不动就是各种付费,要下载软件才能听,当你下载了之后,你会惊奇的发现这首歌还收费,这就让一向喜欢白嫖的小编感到很伤心了。于是,小编冥思苦想...

    前端皮皮
  • Python爬虫:爬取某q音乐歌曲

    “相信大家都很喜欢听音乐,在各种音乐平台上,今天为大家介绍一个利用Python爬取某Q付费音乐的案列,欢迎大家一起学习,一起交流,共同进步!”

    @莜莜
  • (原创)七夜在线音乐台开发 第二弹

    七夜安全博客
  • 被下架封杀几年后,这款 GitHub 上万星、超牛逼的浏览器插件终于回归了

    在过去很长一段时间里,人们想找歌听歌非常简单:只要随便在网络上搜索歌名,无论是在线试听还是下载保存到手机里,都非常方便。

    GitHubDaily
  • 【程序源代码】Csharp爬取音乐源码

    基于.NET的音乐搜索与播放软件(编程语言:C#,爬取4个平台:酷我/网易云/酷狗/QQ)

    程序源代码
  • 另类大数据:中国有嘻哈的rapper们都在唱些什么?

    2017年下半年,钱多、戏多、话题多的《中国有嘻哈》突然带火了一众rapper,原来格格不入的嘻哈音乐突然变成了主流。数据统计显示,截至9月7日,《中国有嘻哈》...

    挖掘大数据
  • 手把手教你使用Python抓取QQ音乐数据(第四弹)

    通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。

    前端皮皮
  • 做了六百万字歌词分析,告诉你为何“freestyle”火遍全网

    所以我用 Python 抓取了美国、英国、台湾、中国香港、中国大陆四个地区,总共六千万的歌词,其中包括大陆600万的歌词,做了一些数据分析的工作,目的就是给你想...

    BestSDK
  • 我们爬取了Billboard数据,发现了乐坛“造星法则”

    什么样的歌手在音乐制作公司眼中最受市场欢迎,且最能给公司带来收益?什么因素会影响这些艺术家们的表演?数据侠Weijie Deng这次自己当了一回音乐经纪人,用数...

    DT数据侠
  • 腾讯杨奇虎:惩罚太轻音乐维权难见成效

      4月26日是第15个世界知识产权日。今年的主题是:“因乐而动,为乐维权——为你钟爱的音乐维权!”   对于数以亿计的中国网民来讲,免费从互联网上下载音乐,已...

    腾讯研究院
  • 手把手教你使用Python抓取QQ音乐数据(第三弹)

    通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。

    Python进阶者
  • 谁该为数字音乐买单?

    罗超为创业家i黑马网站撰稿,2013年5月7日发布于首页头条 你正在用什么听歌?使用Focal-JM Lab的乌托邦系列音响的超级发烧友可以绕过此问题。今天咱...

    罗超频道
  • 爬取数据入门指南

    互联网金融打杂
  • 网易云解锁灰色音乐

    云深无际
  • 数字音乐,又成了阿里和腾讯的盘中餐?

    苹果音乐App近日开始面向中国市场提供超过百万首曲目,并采取收费模式,让数字音乐市场再次成为业界热门话题。一石激起千层浪,静如止水的数字音乐市场正在迎来一场大变...

    罗超频道
  • 本周最新 10 款小程序,除了张小龙推荐的,还有...... | 晓榜 #18

    最近发现一个了「居心不明」的小程序,它通过计算从出生到现在已度过了多少个月,来推测你的人生还剩多少时间,看到结果,男默女泪。

    知晓君
  • 一言不合,我就Remix了网易云音乐500万首歌!

    北半球的夏季,除了空调、西瓜和恋爱的气息,最不能少的还有一样:就是让你燥起来的音乐和旋律。《中国有嘻哈》、《中国新歌声》等一大波音乐综艺的狂轰滥炸,更是推波助澜...

    DT数据侠
  • 被diss的《离人愁》撑起古风圈半边天?

    以抖音3亿月活、在抖音话题榜上超过5亿浏览量、全网15亿的播放量的水准来看,《离人愁》是一首真正达到了「不听不是中国人」水平的爆款神曲。《离人愁》的作者李袁杰声...

    用户1569917
  • 【大数据分析必备】超全国内常用API接口汇总

    下面列举了100多个国内常用API接口,并按照 笔记、出行、词典、电商、地图、电影、即时通讯、开发者网站、快递查询、旅游、社交、视频、天气、团队协作、图片与图像...

    IT派

扫码关注云+社区

领取腾讯云代金券