1 import requests
import re
import json
import os # 便于存放作者的姓名
zuozhe = [] headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'} def get_singermid():
name = input('请输入你要下载歌曲的作者:')
zuozhe.append(name)
if not os.path.exists(name):
os.mkdir(name)
url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}
data = {
'w': name,
'jsonpCallback': 'MusicJsonCallback885332333726736',}
response = requests.get(url,headers=headers,params=data).text
patt = re.compile('MusicJsonCallback\d+\((.*?)\}\)')
singermid = re.findall(patt,response)[0]
singermid = singermid+'}'
dic = json.loads(singermid)
return dic['data']['song']['list'][0]['singer'][0]['mid'] def get_page_html(singermid):
url = 'https://c.y.qq.com/v8/fcg-bin/fcg_v8_singer_track_cp.fcg'
params = {
'g_tk': 5381,
'jsonpCallback': 'MusicJsonCallbacksinger_track',
'loginUin': 0,
'hostUin': 0,
'format': 'jsonp',
'inCharset': 'utf8',
'outCharset': 'utf-8',
'notice': 0,
'platform': 'yqq',
'needNewCode': 0,
'singermid': singermid,
'order': 'listen',
'begin': 0,# 页数 0 30 60
'num': 30,
'songstatus': 1,
}
response = requests.get(url,headers=headers,params=params)
return response.text def get_vkey_data(songmid,strMediaMid,name):
url = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg'
strMediaMid1 = 'C400'+strMediaMid+'.m4a'
data = {
'g_tk': 5381,
'jsonpCallback': "MusicJsonCallback4327043425715609",
'loginUin': 0,
'hostUin': 0,
'format': 'json',
'inCharset': 'utf8',
'outCharset': 'utf-8',
'notice': 0,
'platform': 'yqq',
'needNewCode': 0,
'cid': 205361747,
'callback': 'MusicJsonCallback4327043425715609',
'uin': 0,
'songmid': songmid,
'filename': strMediaMid1,
'guid': 4428680404,
}
response = requests.get(url,headers=headers,params=data).text
try:
patt = re.compile('\"vkey\":\"(.*?)\"')
vkey = re.findall(patt,response)[0]
patt = re.compile('\"filename\":\"(.*?)\"')
filename = re.findall(patt, response)[0]
url1 = 'http://dl.stream.qqmusic.qq.com/' + filename + '?vkey=' + vkey + '&guid=4428680404&uin=0&fromtag=66'
yingyue = requests.get(url1,headers=headers).content
with open(zuozhe[0]+'/'+name+'.m4a','wb') as f:
f.write(yingyue)
f.close()
print('下载完成《'+name+'》')
except Exception as e:
print(e)
pass def get_detail_html(html):
if html:
patt = re.compile('data\":{\"list\":(.*?),\"singer_id',re.S)
json_html = re.findall(patt,html)[0]
data_html = json.loads(json_html)
for data in data_html:
name = data['musicData']['songname']
songmid = data['musicData']['songmid']
strMediaMid = data['musicData']['strMediaMid']
print('正在下载《' + name + '》......')
get_vkey_data(songmid,strMediaMid,name) def main():
# 获取 singermid
singermid = get_singermid()
html = get_page_html(singermid)
get_detail_html(html) if __name__ == '__main__':
main()

爬取qq音乐首先得找到'http://dl.stream.qqmusic.qq.com/' + filename + '?vkey=' + vkey + '&guid=4428680404&uin=0&fromtag=66'这个链接    然后其中只有filename 和vkey 在变化  然后就在列表页寻找这两个参数,找到以后拼接到这个url,然后请求就可以了 。

代码在上面只供参考

python3 可以直接复制然后运行

python3 爬取qq音乐作者所有单曲 并且下载歌曲的更多相关文章

  1. Python爬虫实战一之爬取QQ音乐

    一.前言   前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...

  2. 爬取QQ音乐歌手的歌单

    import requests# 引用requests库res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search ...

  3. 爬取QQ音乐(讲解爬虫思路)

    一.问题描述: 本次爬取的对象是QQmusic,为自己后面做django音乐网站的开发获取一些资源. 二.问题分析: 由于QQmusic和网易音乐的方式差不多,都是讲歌曲信息放入到播放界面播放,在其他 ...

  4. python3爬取咪咕音乐榜信息(附源代码)

    参照上一篇爬虫小猪短租的思路https://www.cnblogs.com/aby321/p/9946831.html,继续熟悉基础爬虫方法,本次爬取的是咪咕音乐的排名 咪咕音乐榜首页http://m ...

  5. 爬取qq音乐巅峰榜---内地音乐的榜单

    import requestsimport jsonimport sys for i in range(0,10): url = "https://szc.y.qq.com/v8/fcg-b ...

  6. python3 爬去QQ音乐

    import requests import re import json import os def get_name(singer): url = 'https://c.y.qq.com/soso ...

  7. 手把手教你使用Python抓取QQ音乐数据(第一弹)

    [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json ...

  8. 手把手教你使用Python抓取QQ音乐数据(第二弹)

    [一.项目目标] 通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精 ...

  9. python3爬取全民K歌

    Python3爬取全民k歌 环境 python3.5 + requests 1.通过歌曲主页链接爬取 首先打开歌曲主页,打开开发者工具(F12). 选择Network,点击播放,会发现有一个请求返回的 ...

随机推荐

  1. css文本样式-css学习之旅(4)

    color:颜色derction:方向:line-height:行高:letter-spaceing:字符间距:text-align:对齐方向:text-decoration:装饰:text-inde ...

  2. Android开源项目——带图标文字的底部导航栏IconTabPageIndicator

    接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译 ...

  3. UML之时序图

            时序图,英文名曰:Sequence Diagram,也称顺序图和序列图,是一种行为图,她通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作.她可以表示用例的行为顺序,当执行一 ...

  4. LeetCode之“树”:Validate Binary Search Tree

    题目链接 题目要求: Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is ...

  5. Struts2(XWork)中的Container 一

    本文是<<struts2 技术内幕>>的学习笔记 在进行面向对象编程的时候,我们不可避免地要使用继承实现等等java提供的语法支持.但是复杂的对象关系也为对象生命周期的管理带来 ...

  6. C语言之可变参实现scanf函数

    既然有printf函数可变参实现,那就一定有scanf函数的可变参实现.废话不多说,源码奉上: 本源码不过多分析,如要明白原理,请翻本博客以往的文章看说明. 欢迎关注新浪微博:http://weibo ...

  7. Leetocde_290_Word Pattern

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/49717803 Given a pattern and a ...

  8. java中split(regex)使用中要注意的问题:正则表达式

    比如我在项目中遇到的(,),.,|,*等等类的符号: String area="(30.13206313822174, 120.4156494140625)(29.8763738070713 ...

  9. Mac 下安装安卓 apk 文件

    Mac 下安装安卓 apk 文件 在windows上有比较多的第三方软件可以使用,双击就可以将apk文件安装到手机上. 在Mac 上要实现这样还是挺难得,目前还没有像Windows那样的第三方软件可以 ...

  10. 2018年,请不要再使用OLE生成EXCEL文件

    输出EXCEL文件是ABAP开发工作中的常见需求,为了学习相关技术,我翻译过一篇文章:使用OLE2对象创建EXCEL文件,并且一度乐在其中. 最近几个月,经过与若干EXCEL打印程序的艰苦斗争,以及对 ...