【Python3爬虫】下载酷狗音乐上的歌

发布时间:2019-03-03 10:22:00编辑:auto阅读(2969)

    经过测试,可以下载要付费下载的歌曲(n_n)

     

    准备工作:Python3.5+Pycharm

    使用到的库:requests,re,json,time,fakeuseragent

     

    步骤:

      打开酷狗音乐的官网,输入想要搜索的歌曲(例如《天后》),然后回车搜索,得到如下页面:

     

        右键检查或者按F12打开开发者工具,点击JS选项,查找到如下信息,FileName就是返回的歌手名和歌曲名信息,我们要将其提取出来:

       由于这个网址返回的不是标准的json格式,所以要先进行如下处理,然后再转换成json格式:

    res = requests.get(url).text
    js = json.loads(res[res.index('(') + 1:-2])
    提取到歌曲信息之后,我们输入一个序号代表要下载的歌曲序号,然后把歌曲下载下来就好了。

    运行截图:

     

    附上源码:
     1 """
     2 Version: Python3.5
     3 Author: OniOn
     4 Site: http://www.cnblogs.com/TM0831/
     5 Time: 2019/2/15 12:07
     6 """
     7 import re
     8 import json
     9 import time
    10 import requests
    11 from fake_useragent import UserAgent
    12 
    13 ua = UserAgent()
    14 
    15 
    16 def get_song(song_name):
    17     search_url = "https://songsearch.kugou.com/song_search_v2?callback=jQuery112405132987859127838_1550204317910&page" \
    18                  "=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_fil" \
    19                  "ter=0&_=1550204317912&keyword={}".format(song_name)
    20     headers = {
    21         "UserAgent": ua.random
    22     }
    23     res = requests.get(search_url, headers=headers)
    24     start = re.search("jQuery\d+_\d+\(?", res.text)
    25     js = json.loads(res.text.strip().lstrip(start.group()).rstrip(")"))  # 注意:末尾有一个换行需要去掉
    26     song_list = js['data']['lists']
    27 
    28     for i in range(10):
    29         print(str(i + 1) + ">>>" + str(song_list[i]['FileName']).replace('<em>', '').replace('</em>', ''))
    30 
    31     num = int(input("\n请输入您想要下载的歌曲序号:"))
    32 
    33     print("请稍等,下载歌曲中...")
    34     time.sleep(1)
    35 
    36     file_hash = song_list[num-1]['FileHash']
    37 
    38     hash_url = "http://www.kugou.com/yy/index.php?r=play/getdata&hash={}".format(file_hash)
    39     hash_res = requests.get(hash_url,headers=headers)
    40     hash_js = hash_res.json()  # json格式
    41     play_url = hash_js['data']['play_url']
    42 
    43     # 下载歌曲
    44     try:
    45         with open("music/" + song_name + ".mp3", "wb")as fp:
    46             fp.write(requests.get(play_url).content)
    47         print("歌曲已下载完成!")
    48     except Exception as e:
    49         print(e)
    50 
    51 
    52 if __name__ == '__main__':
    53     get_song(input("请输入您想要搜索的歌曲名称:"))

关键字