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. Spring注解驱动开发03(按照条件注册bean)

    按照条件注册bean 使用@Conditional注解来控制bean的注册 使用步骤 先实现Condition接口,条件写在matches方法里 注意事项:Condition接口是org.spring ...

  2. 计算机网络-网络层(1)IPv4和IPv6

    IPv4数据报格式: 版本号 这4比特规定了数据报的IP 协议版本.通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分. 首部长度 以4字节为单位,没有选项的首部长度为5*4=20字节 服务类 ...

  3. python的各种包安装地址

    http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy-stack 这个网页里有python的所有包,whl的后缀是python压缩包的意思.在windows ...

  4. java项目的心得,java项目的代码层次的架构划分

    java项目使用的架构是ssm(Spring+SpringMVC+MyBatis). 一.后台代码一般分三层,Controller,Service,Dao. 1.Controller层是对前端或者接口 ...

  5. CF1256A Payment Without Change 题解

    OI生涯打的第一场CF比赛,写篇题解纪念一下吧 ------------可以想到先尽量用面值为1的硬币来凑,然后再用面值为n的硬币来补足.先算出用上所有面值为1的硬币还差多少钱,然后判断用面值为n的硬 ...

  6. oracle之回顾二

    TCL 1.  事务(Transaction) 事务(Transaction)是一个操作序列.这些操作要么都做, 要么都不做, 是一个不可分割的工作单元, 是数据库环境中的最小工作单元. 1.1 事务 ...

  7. asp .net core 静态文件资源

    前言 对静态资源的简单的一个概况,在<重新整理.net core 计1400篇>系列后面会深入. 正文 我们在加入中间件是这样写的: app.UseStaticFiles(); 默认是给w ...

  8. CSAPP bomb分析

    CSAPP bomb分析 问题介绍 这是一个关于反汇编方面的问题,根据已有的二进制代码来推测程序中的特定条件,主要参考了以下各个博客: CSDN 1 CSDN 2 CSDN 3 CSDN 4 stac ...

  9. js中使用const声明变量时需要注意

    const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址(初始化的内容)不得改动.对于简单类型的数据(数值.字符串.布尔值),值就保存在变量指向的那个内存地址,因此等同于常量. 简单 ...

  10. 面向嵌入式的JavaScript引擎

    https://jerryscript.net/ https://duktape.org/ https://github.com/ialex32x/duktape-unity https://gith ...