【python3】酷狗音乐及评论回复下载
新年快乐,上班第一天分享一个python源码,功能比较简单,就是实现酷狗音乐的音乐文件(包含付费音乐)和所有评论回复的下载。
以 米津玄師 - Lemon 为例, 以下为效果图:
1、根据关键词搜索指定音乐,发现是下载是付费的

2、点击进入评论,可以看到有很多的评论,评论底下也有很多的回复

3、执行代码下载音乐、评论回复
3.1、输入关键词搜索音乐,根据歌曲名称和时长,选择目标歌曲,根据提示下载音乐文件

3.2、下载评论回复

3.3、下载结果,评论回复较多,作为例子只下载了一部分

最后附上源码:
import requests
import json
# 写到文档
def write(path, text):
with open(path, 'a', encoding='utf-8') as f:
f.write(text+'\n')
# 时间转换
def get_time(duration):
second = duration % 60
minuter = int(duration / 60)
hour = int(minuter / 60)
minuter = int(minuter % 60) if hour > 0 else minuter
time = []
for i in [hour, minuter, second]:
i = str(i) '+str(i)
time.append(i)
return ':'.join(time)
# 下载音乐
def down(filehash):
hash_url = "http://www.kugou.com/yy/index.php?r=play/getdata&hash={0}".format(filehash)
hash_content = requests.get(hash_url).text
dt = json.loads(hash_content)
audio_name = dt['data']['audio_name']
audio_url = dt['data']['play_url']
with open(audio_name + ".mp3", "wb")as fp:
fp.write(requests.get(audio_url).content)
print("音乐下载完成:{0}".format(audio_name + ".mp3"))
# 下载所有回复
def get_reply(path, special_child_id, tid, pagesize=10, pageindex=1):
url = ('http://comment.service.kugou.com/index.php?'
'r=commentsv2/getReplyWithLike'
'&code=fc4be23b4e972707f36b8a828a93ba8a'
'&p={0}'
'&pagesize={1}'
'&ver=1.01'
'&clientver=8323'
'&kugouid=998708111'
'&clienttoken=8048d52b7884b9e9e606d0a06a6a5ec7b2ad556931dcedc14d9cd3247bf3ee4d'
'&appid=1001'
'&childrenid={2}'
'&tid={3}'.format(pageindex, pagesize, special_child_id, tid))
response = requests.get(url)
response = json.loads(response.text)
if response.get('list'):
for comment in response['list']: # 回复
content = comment.get('content')
user_name = comment.get('user_name')
extdata = comment.get('extdata').replace('null', '\'\'')
city = eval(extdata).get('city')
city = '(' + city + ')' if city else ''
content = '【回复 {1}{0}】{2}'.format(user_name, city, content)
write(path, content)
if response.get('list'): # 列表有值,请求下一页
get_reply(path, special_child_id, tid, pagesize, pageindex + 1)
# 下载所有评论、回复
def get_comment(path, filehash, pagesize=10, pageindex=1):
url = ('http://comment.service.kugou.com/index.php?'
'&r=commentsv2/getCommentWithLike'
'&code=fc4be23b4e972707f36b8a828a93ba8a'
'&extdata={0}'
'&pagesize={1}'
'&ver=1.01'
'&clientver=8323'
'&kugouid=998708111'
'&clienttoken=8048d52b7884b9e9e606d0a06a6a5ec7b2ad556931dcedc14d9cd3247bf3ee4d'
'&appid=1001'
'&p={2}'.format(filehash, pagesize, pageindex)
)
response = requests.get(url)
response = json.loads(response.text)
if response['message'] == 'success':
for index, comment in enumerate(response['list'],1): # 评论
content = comment.get('content')
user_name = comment.get('user_name')
extdata = comment.get('extdata').replace('null','\'\'')
city = eval(extdata).get('city')
city = '('+ city +')' if city else ''
content = '【{0}_{1}评论 {4}{3}】{2}'.format(pageindex, index, content, user_name, city)
write(path, content)
tid = comment.get('id')
special_child_id = comment.get('special_child_id')
get_reply(path, special_child_id, tid) #回复
print("第{0}页下载完成".format(pageindex))
if response.get('list'): # 列表有值,请求下一页
get_comment(path, filehash, pagesize, pageindex + 1)
# 搜索歌曲
def search(keyword, pagesize=10):
search_url = (
'http://songsearch.kugou.com/song_search_v2?callback=jQuery112407470964083509348_1534929985284&keyword={0}&'
'page=1&pagesize={1}&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filte'
'r=0'.format(keyword, pagesize))
response = requests.get(search_url).text
js = json.loads(response[response.index('(') + 1:-2])
data = js['data']['lists']
songs = [['序号', '时长' + ' ' * 4, '歌曲名称']]
print(' >>> '.join(songs[0]))
for index, song in enumerate(data, 1):
filename = song.get('FileName')
filename = filename.replace('<em>', '').replace('</em>', '') if filename else ''
filehash = song.get('FileHash')
duration = song.get('Duration', 0)
duration = get_time(duration)
index = str(index) + (4 - len(str(index))) * ' '
item = [index, duration, filename, filehash]
songs.append(item)
print(' >>> '.join(item[:-1]))
return songs
if __name__ == '__main__':
keyword = input("请输入搜索歌曲名称:")
songs = search(keyword)
while True:
index = 0
while True:
index = input("请输入歌曲序号:")
if index.isdigit() and int(index) < len(songs):
break
else:
print("请输入有效的歌曲序号, 再进行下载选择!")
type = 0
while True:
type = input("下载类型:\n【1】下载音乐\n【2】下载歌曲的所有评论回复\n【-1】退出程序\n请输入下载类型:")
', '-1']:
break
else:
print("请输入有效的下载类型, 再进行下载选择!")
song = songs[int(index)]
filename = song[-2]
filehash = song[-1]
':
down(filehash)
':
get_comment(filename+'.txt', filehash)
elif type == '-1':
exit()
next = input("请选择继续操作类型:\n【1】重新搜索\n【2】继续下载\n【-1】退出程序\n请输入:")
':
keyword = input("请输入搜索歌曲名称:")
songs = search(keyword)
':
continue
elif next == '-1':
exit()
【python3】酷狗音乐及评论回复下载的更多相关文章
- 【Python3爬虫】下载酷狗音乐上的歌曲
经过测试,可以下载要付费下载的歌曲(n_n) 准备工作:Python3.5+Pycharm 使用到的库:requests,re,json,time,fakeuseragent 步骤: 打开酷狗音乐的官 ...
- Python爬虫下载酷狗音乐
目录 1.Python下载酷狗音乐 1.1.前期准备 1.2.分析 1.2.1.第一步 1.2.2.第二步 1.2.3.第三步 1.2.4.第四步 1.3.代码实现 1.4.运行结果 1.Python ...
- Python 应用爬虫下载酷狗音乐
应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...
- htmlunit+fastjson抓取酷狗音乐 qq音乐链接及下载
上次学了jsoup之后,发现一些动态生成的网页内容是无法抓取的,于是又学习了htmlunit,下面是抓取酷狗音乐与qq音乐链接的例子: 酷狗音乐: import java.io.BufferedInp ...
- python使用beautifulsoup4爬取酷狗音乐
声明:本文仅为技术交流,请勿用于它处. 小编经常在网上听一些音乐但是有一些网站好多音乐都是付费下载的正好我会点爬虫技术,空闲时间写了一份,截止4月底没有问题的,会下载到当前目录,只要按照bs4库就好, ...
- Python爬虫:通过做项目,小编了解了酷狗音乐的加密过程
1.前言 小编在这里讲一下,下面的内容仅供学习参考,切莫用于商业活动,一经被相关人员发现,本小编概不负责!读者切记切记. 2.获取音乐播放列表 其实,这就是小编要讲的重点,因为就是这部分用到了加密. ...
- 仿酷狗音乐播放器开发日志十九——CTreeNodeUI的bug修复二(附源码)
转载请说明原出处,谢谢 今天本来打算把仿酷狗播放列表的子控件拖动插入功能做一下,但是仔细使用播放列表控件时发现了几个逻辑错误,由于我的播放 列表控件是基于CTreeViewUI和CTreeNodeUI ...
- 在线音乐播放器-----酷狗音乐api接口抓取
首先身为一个在线音乐播放器,需要前端和数据库的搭配使用. 在数据库方面,我们没有办法制作,首先是版权问题,再加上数据量.所以我们需要借用其他网络播放器的数据库. 但是这些在线播放器,如百度,酷狗,酷我 ...
- 酷狗音乐PC端怎么使用听歌识曲功能?
生活中很多时候会听到一些美妙的音乐,耳熟或者动听却不知道它的名字.就像第一眼看到你心动的那个她却不知她叫什么.移动端有酷狗音乐的听歌识曲.现在PC端也有了相同的功能,每当我们看到一部精彩影视剧听到美妙 ...
随机推荐
- 阿里云ECS服务器环境搭建 ubuntu 16.04 图形界面的安装
https://blog.csdn.net/zwq912318834/article/details/80528374
- python文本文件处理和用户输入
#用户输入 a = input('please input: ') #这个输入什么即是什么,比如输入1,则a变量=1,输入'abc',则a变量 = 'abc',输入abc则报错,因为会把abc当做一个 ...
- [翻译] GCDiscreetNotificationView
GCDiscreetNotificationView GCDiscreetNotificationView is a discreet, non-modal, notification view fo ...
- 多线程应用-函数方式(thread)
多线程只能使用一颗CPU,无法发挥多核心的优势.计算密集型用python的多线程效果不明显的,I/O密集型才能看出效果,可以发挥多核优势. GIL是全局资源锁,所以,如果没有涉及到资源的调用,是不会体 ...
- Maven构建时跳过部分测试
当遇到以下场景: 其他人写的单元测试影响统计结果 一些需要调用外部接口的测试暂不运行 需要在非本机环境上运行一些不回滚的单元测试 则有必要选择以下方法跳过部分测试. 在测试用例前加上注解 @Ignor ...
- ZT linux的mount(挂载)命令详解
linux的mount(挂载)命令详解 来源:互联网 作者:佚名 时间:09-08 17:02:27 [大 中 小] 点评:linux下挂载(mount)光盘镜像文件.移动硬盘.U盘.Window ...
- 在远程登陆的主机上通过命令行源码编译安装 GNU M4、autoconf、automake 等程序
由于实验需要,最近获得了一个实验室服务器的账号,平常主要通过 ssh 进行远程登陆进行实验.一方面,远程登录的机器只提供终端界面,一般只通过命令行进行任务操作:另一方面,由于是多人共享服务器,故而个人 ...
- 深入 Java 调试体系: 第 1 部分,初探JPDA 体系
JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程 ...
- window7远程桌面到server不能复制粘贴解决的方法
用远程桌面登陆server不能在本机和远程server之间粘贴文本了,即不能从本机复制文本粘贴到server,也不能从server复制文本粘贴到本机. 下面是解决方法之中的一个,试了几次都非常管用户: ...
- luogu P2709 小B的询问
嘟嘟嘟 莫队板子. 记住:删除是先删除再移动,添加是先移动在添加! #include<cstdio> #include<iostream> #include<cmath& ...