今天我们用Python来写一个简单的酷狗下载程序

我将这个程序打包成exe文件,有兴趣的可以看下。

链接:https://pan.baidu.com/s/1K2ETIL09-Xwpe4pBtojNiQ
提取码:1b1o

我们先上代码,看下步骤:

import requests
import json
import os
import urllib.parse
#j为歌曲标头
j=1
class KuGou:#初始化def __init__(self,word):#创建目录path="F:/酷狗歌曲下载/"   #路径可以自己定义if not os.path.exists(path):os.mkdir(path)self.path=pathself.word=wordword1= urllib.parse.quote(word)#带参数访问网址self.url="https://songsearch.kugou.com/song_search_v2?callback=jQuery112404383246257004936_1550576119140&keyword={}&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1550576119142".format(word1)#发出requests请求def requests_get(self):r=requests.get(self.url)r.encoding="utf-8"self.req = r.text
#         print(self.req)#获取并且展示歌曲信息def show_song(self):global j
#         songID_list={}songhash_list={}  #hash列表song_name={}    #歌曲名字# json文件信息  kg=json.loads(self.req.lstrip("jQuery112404383246257004936_1550576119140(").rstrip().rstrip(r')'))self.kg=kgfor song in kg['data']['lists']:print("{0}————{1}".format(j,song['SongName']))song_name[str(j)]=song['SongName']songhash_list[str(j)]=song['FileHash']j+=1self.song_name=song_nameself.songhash_list=songhash_list
#         self.songID_list=songID_list
#         print(songhash_list)
#下载歌曲def download_song(self):num=input("您想下载哪首歌(输数字):")url="http://www.kugou.com/yy/index.php?r=play/getdata&hash={}".format(self.songhash_list[num])hash_res=requests.get(url)hash_js=hash_res.json()play_url=hash_js['data']['play_url']
#         print(play_url)with open(self.path+self.song_name[num]+".mp3","wb") as f:f.write(requests.get(play_url).content)print("《{}》下载完成".format(self.song_name[num]))#选择是否继续爬取def exit(self):str1=input("继续下载(y),还是退出(n):")return str1if __name__ == "__main__":print("欢迎来到酷狗下载系统")word=input("请输入歌手名:")
#     word="杨宗纬"pachong=KuGou(word)pachong.requests_get()pachong.show_song()pachong.download_song()str1=pachong.exit()while str1!="n":if str1 == "y":pachong.download_song()str1 = pachong.exit()elif str1 == "n":print("已退出")else:print("输入错误,请重新输入!")str1 = pachong.exit()

效果如图:

我们分为 步走:

  • 1、创建目录
  • 2、发出requests请求
  • 3、获取歌曲信息(歌名,歌曲链接)
  • 4、下载歌曲

第一步,创建目录,带参数访问网址

import requests
import json
import os
import urllib.parse
#j为歌曲标头
j=1
class KuGou:#初始化def __init__(self,word):#创建目录path="F:/酷狗歌曲下载/"   #路径可以自己定义if not os.path.exists(path):os.mkdir(path)self.path=pathself.word=wordword1= urllib.parse.quote(word)#带参数访问网址self.url="https://songsearch.kugou.com/song_search_v2?callback=jQuery112404383246257004936_1550576119140&keyword={}&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1550576119142".format(word1)

我们来解析下酷狗的网址:

https://songsearch.kugou.com/song_search_v2?callback=jQuery112404383246257004936_1550576119140&keyword= {“这是关键字”}&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1550576119142

第二步,发出requests请求

#发出requests请求def requests_get(self):r=requests.get(self.url)r.encoding="utf-8"self.req = r.text
#         print(self.req)

第三步,获取歌曲信息

    #获取并且展示歌曲信息def show_song(self):global j
#         songID_list={}songhash_list={}  #hash列表song_name={}    #歌曲名字# json文件信息  kg=json.loads(self.req.lstrip("jQuery112404383246257004936_1550576119140(").rstrip().rstrip(r')'))self.kg=kgfor song in kg['data']['lists']:print("{0}————{1}".format(j,song['SongName']))song_name[str(j)]=song['SongName']songhash_list[str(j)]=song['FileHash']j+=1self.song_name=song_nameself.songhash_list=songhash_list
#         self.songID_list=songID_list
#         print(songhash_list)

song_name是一个字典,存放歌曲名字,格式:{‘第几首’:“歌曲名字”}
songhash_list是一个字典,存放歌曲链接的hash参数(很重要)

第四步,下载歌曲(加后面的代码)

#下载歌曲def download_song(self):num=input("您想下载哪首歌(输数字):")url="http://www.kugou.com/yy/index.php?r=play/getdata&hash={}".format(self.songhash_list[num])hash_res=requests.get(url)hash_js=hash_res.json()play_url=hash_js['data']['play_url']
#         print(play_url)with open(self.path+self.song_name[num]+".mp3","wb") as f:f.write(requests.get(play_url).content)print("《{}》下载完成".format(self.song_name[num]))#====================================================================================================#选择是否继续爬取def exit(self):str1=input("继续下载(y),还是退出(n):")return str1if __name__ == "__main__":print("欢迎来到酷狗下载系统")word=input("请输入歌手名:")
#     word="杨宗纬"pachong=KuGou(word)pachong.requests_get()pachong.show_song()pachong.download_song()str1=pachong.exit()while str1!="n":if str1 == "y":pachong.download_song()str1 = pachong.exit()elif str1 == "n":print("已退出")else:print("输入错误,请重新输入!")str1 = pachong.exit()

您的支持,是我前进最大的动力!

用Python写一个酷狗爬歌系统相关推荐

  1. 上班摸鱼用Python写一个酷狗音乐播放器

    Python改变生活,科技改变世界. 这个五一好想出去浪啊,可惜工作不允许啊,只放了两天假,不得不又回到工作岗位了,虽然也没啥事,然后就上班摸鱼写了这个酷狗音乐播放器,自己一边听歌一边下载歌曲歌词也蛮 ...

  2. 网页mp3提取器_用Python写一个酷狗音乐下载器!

    [这就是标题] 距离上一次发推送差不多有一个月了ヽ(ー_ー)ノ 做了一个小的酷狗音乐下载器,公众号内回复704就可以收到下载链接. 长下面这样. 双击打开,会提示让输入你要搜索的歌曲. 这里输入去流浪 ...

  3. 利用python写一个简单的双色球彩票系统

    利用python写一个简单的双色球彩票系统 1.设置每次买的号码一样 写一个双色球彩票系统,系统可以随机产生一组数据,一组彩票数据有六位数,这六位数的的取值范围是0和1. 一张彩票是两块钱,用户可以选 ...

  4. 用Python写一个网络爬虫爬取网页中的图片

    写一个爬虫爬取百度贴吧中一个帖子图片 网址:壁纸 用谷歌浏览器的开发工具检查网页,可以发现其每一张图片都有如下格式 <img class="BDE_Image" src=&q ...

  5. python写一个爬虫、爬取网站漫画信息_python爬取漫画

    原博文 2017-05-31 00:56 − 抓取漫画的网址是:sf互动传媒 抓取漫画的由来也是看了知乎上有人说用爬取漫画,然后自己也玩玩 首页中每个漫画的url是类似这样存储的: 相关推荐 2019 ...

  6. 用Python写一个爬虫,爬取双色球开奖记录

    好的,下面是一个简单的爬虫代码,它爬取了双色球开奖记录: import requests from bs4 import BeautifulSoupurl ="http://kaijiang ...

  7. 如何用Python写一个模拟的英雄联盟登陆系统!!!(详解)

    while True:print("\t\t\t英雄联盟登陆界面\n")print("~*"*38)print("\t\t\t1.用户登陆\n&quo ...

  8. python 一键下载酷狗歌单

    python 一键下载酷狗歌单 酷狗很多音乐下载都需要钱,于是我就想使用python进行爬取.在网上找了一圈,全是需要一首一首歌来找然后列出url.但是,谁又有耐心去找呢.于是我花了2小时写了这个脚本 ...

  9. python爬虫抢火车票_如何用python写一个简单的12306抢票软件|python 爬火车票 教程...

    python 如果抓取验证码图片 类似12306的登录验证码图片 这个以前做次.最大的麻烦是码的识别算法的识别率太低.12306那种网站登陆错3次就限制你20分钟.所以除非你有33%以上的识别率否则不 ...

最新文章

  1. 语言兔子繁衍问题讲解_二年级思维数学:位置问题,找到重复部分是解题关键...
  2. 分布式选举协议:Raft
  3. 金蝶ERP实现产品入库及委外加工冲减生产现场虚仓毛坯数(修正版07-05-10)
  4. 数字水印技术 概念 应用及现状
  5. 技术入股创业一年,家庭收入变成负5万
  6. http://nxlhero.blog.51cto.com/962631/1666250?plg_nld=1plg_uin=1plg_auth=1plg_nld=1plg_usr=1plg_...
  7. uniAPP 禁用原生导航栏 和 获取状态栏高度 和 使用(间距掉)
  8. i2c-test使用说明
  9. JavaScript 练手小技巧:页面高亮操作提示和蒙板
  10. ie浏览器打不开闪退_ie浏览器点开闪退_ie浏览器打不开?就是闪退.别的可以_ie浏览器打不开闪退...
  11. win10解决PL2303串口错误方法
  12. Java里面jvr_微信小程序java解密报异常Key length not 128/192/256 bits
  13. 拼多多 2020校园招聘 二维表第k大数(二分)
  14. (已更新)柒微自动发卡系统源码
  15. USBtoSerial 产品的选择及安装
  16. 认识Fitnesse
  17. linux中文件权限 组,linux中文件权限格式与chmod命令以及用户和用户组的管理
  18. 5.1.2 运输层的两个重要协议
  19. 化妆品二维码防伪标签印刷制作公司
  20. ryu实例---网络时延探测

热门文章

  1. [451]pandas.get_dummies 的用法
  2. mysql 2059
  3. C# task 取消
  4. python多线程编程模块不包括_python 学习_第四模块 并发编程(多线程)
  5. java连接数据库打印输出中文显示乱码
  6. 堆-堆的基本概念与操作
  7. Linux nand设备驱动
  8. Nisi实现安装包制作
  9. 怎么安装nerworkx_ubuntu 下NetworkX的安装和使用
  10. Glide缓存图片流程浅析