欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬虫初上手之爬取QQ音乐!

程序员文章站 2022-07-15 14:12:18
...

爬虫初上手之爬取QQ音乐!


作为一名爬虫界的萌新,我终于通过了新手教程——requests库的学习,兴致勃勃地撸起袖子准备大爬一场大干一场。

我的第一个爬取目标是QQ音乐。在我的设想中,一个网站的根目录下有很多子目录,里面装着子网页和各种资源,其中一个文件夹就是音乐库,所有的音乐都在里面被分门别类地存放好,我只要找到这个文件夹就好了。比如这样:r = requests.get('https://y.qq.com/music/你的名字.mp3')

“爬虫真是又简单又方便!一行代码连QQ音乐都能爬下来!”我这么想着,打开了QQ音乐的主页,然后就看到了这个:爬虫初上手之爬取QQ音乐!
emmm,好吧,看样子事情并没有我想的那么简单。

爬虫初上手之爬取QQ音乐!
WTF?!网页版下不了歌??那我怎么爬?我人都傻了。。

没办法,看样子我还是太菜了,所以我只好在网上找资料,看看大神都是怎么爬的。

。。

。。。

。。。。

。。。。。

。。。。。。

终于,被我找到了一个大神的博客:https://blog.csdn.net/weixin_44119390/article/details/90812246
这篇博客不长,在大神一通眼花缭乱看不懂的操作之后,就成功找到了资源的url。
没办法,一步一步地查资料,一点一点地理解吧,慢慢来。。。
。。。。。。

。。。。。

。。。。

。。。

。。


我终于弄懂大神的意思了哈哈哈哈哈~~(笑容中透着心酸)~~

以下是参考博主后我自己的代码:

import requests
import json
import os

class QQmusic:
    def __init__(self):
        self.songlist = []

    def get(self,url):              # 访问服务器
        try:
            res = requests.get(url,headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'})
            res.raise_for_status()
        except:
            print('连接服务器失败!')
            os.system("pause")
        else:
            res.encoding = 'utf-8'
            return res

    def search(self):               # 搜索音乐
        name = input('请输入歌名或歌手:')
        url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p=1&n=20&w=%s'%(name)
        html = self.get(url).text
        html = html[9:]
        html = html[:-1]
        html = json.loads(html)          # 获取歌曲信息
        self.songlist = html['data']['song']['list']
        for song in self.songlist:
            if song['pay']['paydownload']:
                print(song['songname'],song['singer'][0]['name'],'[VIP]')
            else:
                print(song['songname'], song['singer'][0]['name'])


    def download(self):                 # 下载音乐
        choice = int(input('您想下载第几首歌(1~20):'))
        while self.songlist[choice-1]['pay']['paydownload']:
            choice = int(input('您无法下载VIP歌曲!请重新输入(1~20):'))
        print('开始获取资源......')         # 获取vkey,purl
        keyUrl = 'https://u.y.qq.com/cgi-bin/musicu.fcg?&data={"req":{"param":{"guid":"9106200888"}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"9106200888","songmid":["%s"],"uin":"3137"}},"comm":{"uin":3137}}'%(self.songlist[choice-1]['songmid'])
        html = self.get(keyUrl).text
        html = json.loads(html)
        purl = html['req_0']['data']['midurlinfo'][0]['purl']
        url = 'http://dl.stream.qqmusic.qq.com/' + purl       # 拼凑资源url
        print('资源地址获取成功')
        music = self.get(url).content
        with open(self.songlist[choice-1]['singer'][0]['name'] + '   ' + self.songlist[choice-1]['songname'] + '.mp4', 'wb') as f:
            f.write(music)
            print('下载完成')
            f.close()
            os.system("pause")

QQ = QQmusic()
QQ.search()
QQ.download()

运行结果:
爬虫初上手之爬取QQ音乐!

emmm,界面好丑,接下来是GUI图形化了,又是一块硬骨头。。

下期再见!

相关标签: 初学者