url:https://www.kugou.com/yy/html/rank.html

我们随便访问一个歌曲可以看到url有个hash

https://www.kugou.com/song/#hash=AC9D859362CABB2092AEAA39A072606A&album_id=39211957

但是这个hash是可以得到的

import re
import requests
import json headers = {
'cookie': 'kg_mid=7a7f50715e7cbc43187cb14650a074d7; ACK_SERVER_10015=%7B%22list%22%3A%5B%5B%22gzlogin-user.kugou.com%22%5D%5D%7D; ACK_SERVER_10016=%7B%22list%22%3A%5B%5B%22gzreg-user.kugou.com%22%5D%5D%7D; ACK_SERVER_10017=%7B%22list%22%3A%5B%5B%22gzverifycode.service.kugou.com%22%5D%5D%7D; kg_dfid=2lP8Vp1RHLHj0wmucn0XlXFL; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1600062203; kg_mid_temp=7a7f50715e7cbc43187cb14650a074d7; KuGooRandom=66401600062231494; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1600062409',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
hash_com = re.compile('"Hash":"(.*?)"',re.I|re.S)
html = requests.get('https://www.kugou.com/yy/html/rank.html',headers=headers)
hash_result = hash_com.findall(html.text)
print(hash_result)

然后我们刷新歌曲这里得网页可以看到都是在这里

发送都是这个url

Request URL: https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19108001866002482712_1600062977462&hash=AC9D859362CABB2092AEAA39A072606A&album_id=39211957&dfid=2lP8Vp1RHLHj0wmucn0XlXFL&mid=7a7f50715e7cbc43187cb14650a074d7&platid=4&_=1600062977464

然后我敲门只留hash前面看看能不能访问

https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19108001866002482712_1600062977462&hash=AC9D859362CABB2092AEAA39A072606A

访问是可以的

然后我们再拼接一下

import re
import requests
import json headers = {
'cookie': 'kg_mid=7a7f50715e7cbc43187cb14650a074d7; ACK_SERVER_10015=%7B%22list%22%3A%5B%5B%22gzlogin-user.kugou.com%22%5D%5D%7D; ACK_SERVER_10016=%7B%22list%22%3A%5B%5B%22gzreg-user.kugou.com%22%5D%5D%7D; ACK_SERVER_10017=%7B%22list%22%3A%5B%5B%22gzverifycode.service.kugou.com%22%5D%5D%7D; kg_dfid=2lP8Vp1RHLHj0wmucn0XlXFL; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1600062203; kg_mid_temp=7a7f50715e7cbc43187cb14650a074d7; KuGooRandom=66401600062231494; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1600062409',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
hash_com = re.compile('"Hash":"(.*?)"',re.I|re.S)
html = requests.get('https://www.kugou.com/yy/html/rank.html',headers=headers)
hash_result = hash_com.findall(html.text)
# print(hash_result)
base_url = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19108001866002482712_1600062977462&hash='
for hash in hash_result:
url = base_url+hash
# print(url)

然后再获取url

jsondata = requests.get(url,headers=headers)
print(jsondata.text)

输出为

我们来.json()看看

print(jsondata.json())

但是返回错误了,所以不是一个合法json,来转换一下,通过find来找到合法的json头部和尾部

他的合法开头再这里

结尾就是 .mp3"}}

start = jsondata.text.find('{"status":1')
end = jsondata.text.find('.mp3"}}')+len('.mp3"}}')
print(jsondata.text[start:end])

这里加上len就是因为[]是左闭右合的,返回

全部代码

import re
import requests
import json
import os headers = {
'cookie': 'kg_mid=7a7f50715e7cbc43187cb14650a074d7; ACK_SERVER_10015=%7B%22list%22%3A%5B%5B%22gzlogin-user.kugou.com%22%5D%5D%7D; ACK_SERVER_10016=%7B%22list%22%3A%5B%5B%22gzreg-user.kugou.com%22%5D%5D%7D; ACK_SERVER_10017=%7B%22list%22%3A%5B%5B%22gzverifycode.service.kugou.com%22%5D%5D%7D; kg_dfid=2lP8Vp1RHLHj0wmucn0XlXFL; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1600062203; kg_mid_temp=7a7f50715e7cbc43187cb14650a074d7; KuGooRandom=66401600062231494; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1600062409',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
hash_com = re.compile('"Hash":"(.*?)"',re.I|re.S)
html = requests.get('https://www.kugou.com/yy/html/rank.html',headers=headers)
hash_result = hash_com.findall(html.text)
# print(hash_result)
base_url = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19108001866002482712_1600062977462&hash='
for hash in hash_result:
url = base_url+hash
# print(url)
jsondata = requests.get(url,headers=headers)
start = jsondata.text.find('{"status":1')
end = jsondata.text.find('.mp3"}}')+len('.mp3"}}')
# print(jsondata.text[start:end])
songurl = json.loads(jsondata.text[start:end])['data']['play_url']
title = json.loads(jsondata.text[start:end])['data']['audio_name'] if not os.path.exists('酷狗'):
os.mkdir('酷狗') with open('酷狗/{}.mp3'.format(title),'wb')as f:
f.write(requests.get(songurl).content)

python爬取酷狗音乐的更多相关文章

  1. python爬取酷狗音乐排行榜

    本文为大家分享了python爬取酷狗音乐排行榜的具体代码,供大家参考,具体内容如下  

  2. Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)

    在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...

  3. Python爬取酷狗飙升榜前十首(100)首,写入CSV文件

    酷狗飙升榜,写入CSV文件 爬取酷狗音乐飙升榜的前十首歌名.歌手.时间,是一个很好的爬取网页内容的例子,对爬虫不熟悉的读者可以根据这个例子熟悉爬虫是如何爬取网页内容的. 需要用到的库:requests ...

  4. python使用beautifulsoup4爬取酷狗音乐

    声明:本文仅为技术交流,请勿用于它处. 小编经常在网上听一些音乐但是有一些网站好多音乐都是付费下载的正好我会点爬虫技术,空闲时间写了一份,截止4月底没有问题的,会下载到当前目录,只要按照bs4库就好, ...

  5. 使用scrapy 爬取酷狗音乐歌手及歌曲名并存入mongodb中

    备注还没来得及写,共爬取八千多的歌手,每名歌手平均三十首歌曲算,大概二十多万首歌曲 run.py #!/usr/bin/env python # -*- coding: utf-8 -*- __aut ...

  6. 【Python】【爬虫】爬取酷狗音乐网络红歌榜

    原理:我的上篇博客 import requests import time from bs4 import BeautifulSoup def get_html(url): ''' 获得 HTML ' ...

  7. 【Python】【爬虫】爬取酷狗TOP500

    好啦好啦,那我们来拉开我们的爬虫之旅吧~~~ 这一只小爬虫是爬取酷狗TOP500的,使用的爬取手法简单粗暴,目的是帮大家初步窥探爬虫长啥样,后期会慢慢变得健壮起来的. 环境配置 在此之前需要下载一个谷 ...

  8. htmlunit+fastjson抓取酷狗音乐 qq音乐链接及下载

    上次学了jsoup之后,发现一些动态生成的网页内容是无法抓取的,于是又学习了htmlunit,下面是抓取酷狗音乐与qq音乐链接的例子: 酷狗音乐: import java.io.BufferedInp ...

  9. 使用Xpath爬取酷狗TOP500的歌曲信息

    使用xpath爬取酷狗TOP500的歌曲信息, 将排名.歌手名.歌曲名.歌曲时长,提取的结果以文件形式保存下来.参考网址:http://www.kugou.com/yy/rank/home/1-888 ...

随机推荐

  1. 使用pip安装模块,出现Cannot unpack file xxx的问题的解决

    在windows下使用pip 豆瓣源安装gevent时出现错误 解决办法: pip install -i https://pypi.douban.com/simple/ --trusted-host ...

  2. Jmeter 常用函数(16)- 详解 __split

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 根据分隔符分割传递给它的字符串 语法格式 ...

  3. 小程序 RecorderManager计时不准确问题

    官方文档:RecorderManager 录音管理器,内部实现计时不准确.有以下俩个问题: 点击暂停继续,当录音结束时,stop返回的时间包含了暂停的那一段时间. 正常录音,录音文件的时长有概率少个1 ...

  4. [CSP-S2019]划分 题解

    CSP-S2 2019 D2T2 考场上读完题感觉是DP就直接扔了开T3了,考完才发现部分分好像不难拿,枯了 题意分析 给出一个数列,要求将其分成几段,使每段的和非严格递增,求最小的每段的和的平方和. ...

  5. Xposed+X5使用

    1.Xposed 2.X5

  6. 如何成为一位合格的ScrumMaster

    嗨,大家好,我是叶子 ScrumMaster的职责简单理解为:确保团队按照scrum的方式运行,团队的教练,帮助团队更好的工作,过程中的执行者,能够在team和po之间平衡.移除项目进度的障碍,保护团 ...

  7. 使用python制作趣味小游戏—投骰子

    1.模拟真实环境掷骰子 从Python标准库中调用模块:random——random中包含以各种方式生成随机数的函数 从random中引用randint这一函数——骰子都是有固定面数 from ran ...

  8. java工具类去掉字符串String中的.点。android开发java程序员常用工具类

    下面是工具类详细代码: package com.qq986945193.david; /** * qq986945193 Project * ============================= ...

  9. Android开发java开发之常用英文词汇汇总。程序员必备英语单词

    ANR  (Application Not Response )  bundle 捆, entire 整个的,完整的 lifetime 生命周期 entire lifetime 完整生命周期 visi ...

  10. 【Webpack】NodeJS + Webpack

    目的:想要通过npm命令按照我们的规则生成静态资源(webpack4以后还能做到很多性能优化的配置,我所知道的只有css.js分包,以达到资源快速加载快速呈现的效果). 一.安装webpack npm ...