• Python应用爬虫下载QQ音乐歌曲!


    目录:

      1.简介怎样实现下载QQ音乐的过程;

      2.代码

    1.下载QQ音乐的过程

    首先我们先来到QQ音乐的官网: https://y.qq.com/,在搜索栏上输入一首歌曲的名称;

    如我在上输入最美的期待,按回车来到这个画面

     我们首先要得到这些歌曲名称和其他一些信息

    鼠标右键查看源代码发现这些数据应该应用了反爬虫

    鼠标右键点击检查,点击NetWork,然后点击XHR,按F5刷新,然后点击 https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=66920929169890801&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=%E6%9C%80%E7%BE%8E%E7%9A%84%E6%9C%9F%E5%BE%85&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0这个网址,如下图:

     发现这里好像有我们需要的数据

     那么这个网址要怎样才能得到呢!其实也不难发现,就下面的那个w=不同而已,对于不同歌曲。

     而这个w=后面的那个数据好像就是我输入的歌曲名,最美的期待,只不过这里对于这个进行了编码罢了。

    我们只要这样输入就可以了

    from urllib import parse

    w=parse.urlencode({'w':input('输入歌名:')})

    url='https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=63229658163010696&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&%s&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0'%(w)

    print(url)

    这样我们就得到了这个url

    这样得到的数据是一个字符串,这个字符串类似‘{'key':{'key_1':1}}’,我们可以导入json模块,来处理它,这样我们得到的数据就是一个字典了。

    我们点击其中的一首歌试听,来到这个界面

     右击鼠标,点击检查,点击NetWork,点击XHR,找到下面这个网址发现

     在这里我们可以发现有这首歌曲的下载地址,发现purl下面的一个参数是上面得到的那个数据中的’mid‘,只要将两者结合起来,就可以下载这首歌曲了。

    代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70


    import urllib.parse as parse

    from urllib.request import urlretrieve

    import requests

    import json

    import os

    import time

    import sys

    def Time_1():     #  进度条函数

        for in range(1,51):

            sys.stdout.write('\r')

            sys.stdout.write('{0}% |{1}'.format(int(i%51)*2,int(i%51)*'■'))

            sys.stdout.flush()

            time.sleep(0.125)

        sys.stdout.write('\n')

    print('''

    声明:本小程序仅供娱乐和学习,切莫用于商业用途,一经发现,概不负责!

    ''')

    w=parse.urlencode({'w':input('输入歌名:')})

    url='https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=63229658163010696&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&%s&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0'%(w)

    content=requests.get(url=url)

    str_1=content.text

    dict_1=json.loads(str_1)

    song_list=dict_1['data']['song']['list']

    str_3='''https://u.y.qq.com/cgi-bin/musicu.fcg?-=getplaysongvkey5559460738919986&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"1825194589","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"1825194589","songmid":["%s"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":24,"cv":0}}'''

    url_list=[]

    music_name=[]

    for in range(len(song_list)):

        music_name.append(song_list[i]['name']+'-'+song_list[i]['singer'][0]['name'])

        print('{}.{}-{}'.format(i+1,song_list[i]['name'],song_list[i]['singer'][0]['name']))

        url_list.append(str_3 % (song_list[i]['mid']))

    id=int(input('请输入你想下载的音乐序号:'))

    content_json=requests.get(url=url_list[id-1])

    dict_2=json.loads(content_json.text)

    url_ip=dict_2['req']['data']['freeflowsip'][1]

    purl=dict_2['req_0']['data']['midurlinfo'][0]['purl']

    downlad=url_ip+purl

    try:

        os.mkdir('./QQ音乐')

    except:

        pass

    finally:

        try:

            print('开始下载...')

            urlretrieve(url=downlad,filename='./QQ音乐/{}.mp3'.format(music_name[id-1]))

            Time_1()

            print('{}.mp3下载完成!'.format(music_name[id-1]))

        except Exception as e:

            print(e,'对不起,你没有该歌曲的版权!')

    </strong></em>

      

     运行结果:

    下载完成后,会在同一个文件下面多了一个QQ音乐的文件夹,所下载的歌曲就在这里面。

     最后:如果你对Python感兴趣,想要学习Python,希望可以帮到你,一起加油!以上是给大家分享的Python全套学习资料,都是我自己学习时整理的:

    一、Python所有方向的学习路线

    Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

    图片

    图片

    二、学习软件

    工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

    图片

    三、全套PDF电子书

    书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

    图片

    四、入门学习视频全套

    我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

    图片

    图片

    五、实战案例

    光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

    图片

    图片

      **学习资源已打包,需要的小伙伴可以戳这里:【学习资料】

  • 相关阅读:
    从程序员到架构师:大数据量、缓存、高并发、微服务、多团队协同等核心场景实战书籍
    【17】c++设计模式——>原型模式
    Java 程序执行
    equals&==
    PHP黑魔法之md5绕过
    leetcode 26
    leetcode 48. Rotate Image 旋转图像(Medium)
    关于maven读取settings.xml文件的优先级问题
    开发板TFTP调试
    TypeScript系列之类型 void
  • 原文地址:https://blog.csdn.net/Python_trys/article/details/140382995