专栏首页机器学习原理爬虫篇(4)——qq音乐文件的爬取

爬虫篇(4)——qq音乐文件的爬取

前言:qq音乐文件的批量爬取,涉及到的json对网站的解析,请求的有效伪装,字符串的操作等。 目的:爬取想要的音乐资源,包括需要付费下载的音乐。

  • 流程 包括网站分析以及代码实现
  • 网站分析 运用倒推的方法,从音乐文件的网址出发,找到对应文件的参数 1.音乐文件网址
http://dl.stream.qqmusic.qq.com/C400003KExF60zMMGK.m4a?vkey=CB06A4F49AB76D6C336BEB5BF85B8B6694AE9CAFCA0FF
8000C87984F69777F1AFA6A0159CFC497A7FB2CBB36833900A04C75ECE9FC8CE528&guid=9602668140&uin=0&fromtag=66
分析播放歌曲链接:
只有下列参数不同
        1.文件名
        C400003KExF60zMMGK.m4a
         简化:
        003KExF60zMMGK
        2.vkey
        vkey=F3263444D4844C31F3525B2FBA94935BF0466ACCE675A21B2EC5F599E6A42A812615BF4D83335B5EFE6989ED2BA08D161A00A319598BA6EE

2.从播放页面找到这些不同的参数以及装有这些参数的网址

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallbac
k20480960151150063&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=y
qq&needNewCode=0&cid=205361747&callback=MusicJsonCallback20480960151150063&uin=0&songmid=003KExF60zMMGK&filename=C400003KExF60zMMGK
.m4a&guid=9602668140
分析链接:
找这些不同参数:
        songmid:"003KExF60zMMGK"
eferer:https://y.qq.com/portal/player.html

3.从音乐列表找到这些不同的参数和网址

https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&dissti
d=1480619034&format=jsonp&g_tk=5381&jsonpCallback=playlistinfoCallback&loginUin=0&hostUin=0&format=json
p&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0
分析链接:
找这些不同参数:
          找不同:
              disstid=1480619034
              disstid来源链接:入口链接
referer:https://y.qq.com/n/yqq/playsquare/1480619034.html

4.从播放列表找到这些不同的参数和网址

https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg?picmid=1&rnd=0.7709971027608087&g_tk=5381
&jsonpCallback=getPlaylist&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0
&platform=yqq&needNewCode=0&categoryId=10000000&sortId=5&sin=0&ein=29
找不同:
    sin=0
    ein=29
    sum=5260
referer:https://y.qq.com/portal/playlist.html

入口和出口都找到了,开始写代码

  • 代码如下
import requests
import json
import time
def get_Disstid(url):
    headers={
        "User-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
        "Referer":"https://y.qq.com/portal/playlist.html",
        "Host":"c.y.qq.com"
    }
# 1访问入口得到音乐列表的disstid
    res = requests.get(url,headers=headers).text
    re=res.strip("getPlaylist()")
    r=json.loads(re)
    for x in r["data"]["list"]:
        # 用得到的dissid进行拼接得到新的url
        sub_url = " https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&disstid={0}&format=jsonp&g_tk=5381&jsonpCallback=playlistinfoCallback&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0".format(x["dissid"])
#2访问音乐分类,得到歌单的songmid,songname
        headers["referer"]="https://y.qq.com/n/yqq/playsquare/{0}.html".format(x["dissid"])
        res = requests.get(sub_url, headers=headers).text
        re = res.strip("playlistinfoCallback()")
        r = json.loads(re)
        for x in r["cdlist"][0]["songlist"]:
            songmid = x["songmid"]
            songname = "C400{0}.m4a".format(songmid)
            song = x["songname"]
            key_url = "https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback20480960151150063&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback20480960151150063&uin=0&songmid={0}&filename={1}&guid=9602668140".format(
                songmid, songname)
#3.访问播放页面,得到每首歌的vkey
            headers["Referer"] = "https://y.qq.com/portal/player.html"
            res = requests.get(key_url, headers=headers).text
            re = res.strip("MusicJsonCallback20480960151150063()")
            r = json.loads(re)
            for x in r["data"]["items"]:
                vkey = x["vkey"]
                song_url = "http://dl.stream.qqmusic.qq.com/{0}?vkey={1}&guid=9602668140&uin=0&fromtag=66".format(
                    songname, vkey)
#4.访问音乐文件下载
                headers["Host"]="dl.stream.qqmusic.qq.com"
                del headers["Referer"]
                res=requests.get(song_url,headers=headers,stream=True)
                filename = "music/{0}.m4a".format(song)
                print(song)
                with open(filename,"wb") as f:
                    f.write(res.raw.read())
if __name__ == '__main__':
    sin = 0
    ein = 29
    sum = 5620
    while True:
        url="https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg?picmid=1&rnd=0.7709971027608087&g_tk=5381&jsonpCallback=getPlaylist&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&categoryId=10000000&sortId=5&sin={0}&ein={1}".format(sin,ein)
        sub_url_list=get_Disstid(url)
        if ein<5620:
            sub_url_list = get_Disstid(url)
            sin+=30
            ein+=30
        else:
            break
        time.sleep(1)

结果如图:

image.png

爬虫篇(3)——招聘网站招聘信息的爬取 爬虫篇(2)——爬取博客内容 爬虫篇(1)——从爬取练习题开始

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 爬取百度问答目的分析网页总结

    由于最近再开发问答系统,数据获取是一个问题,所以想通过爬虫爬取百度知道里面的问题和最优答案。

    DC童生
  • 句子相似度计算

    Word2Vec将词映射为一个词向量,在这个向量空间中,语义相似的词之间距离会比较小,而词移距离(WMD)正是基于word2vec的这一特性开发出来的。 两个...

    DC童生
  • 机器学习篇(1)——基础定义流程

    前言: 以下是在自己理解的基础上做的总结,介绍了机器学习的定义以及评估算法的几个概念 定义 机器学习是一门从数据中研究算法的科学学科。是根据已有的数据,...

    DC童生
  • 两封发票主题攻击邮件分析

    3月6日上午,邮箱连续收到两封以税务发票“Tax Invoice”为主题的邮件,全部是英文信息,接收时间分别是早上8:27和9:15,附件是windows系统....

    FB客服
  • bonesi :在实验环境下模拟DDoS攻击流量的工具

    BoNeSi,DDoS僵尸网络模拟器是一种测试平台环境中模拟僵尸网络流量的工具。它旨在研究DDoS攻击的影响。

    周俊辉
  • 31.1企业级开发进阶3.1:发送电子邮件

    从古代的八百里加急,到现在的电子邮件,邮件的发展见证了上下五千年的发展史,这些当然是废话,只是要说说邮件的重要性。

    大牧莫邪
  • Linux基础(day43)

    11.18 Apache用户认证 httpd的用户认证目录 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.c...

    运维小白
  • 11.18 Apache用户认证

    httpd的用户认证目录 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚...

    运维小白
  • 大数据告诉你:如何让大忙人及时回复邮件

    网上教人们如何写邮件的建议不少,但大多还没有数据做支撑。最近,邮件效率服务商Boomerang通过分析5300多万封邮件数据,找出了一些影响邮件回复率的窍门。总...

    华章科技
  • 从移动安全看企业信息安全发展

    近些年,移动应用已是人们生活中重要的一部分。无论是淘宝,还是微信,无论是支付宝还是网银,手机已能完成生活中的大部分工作,我们甚至可以猜想,在未来的某个时刻,我们...

    安恒信息

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动