1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python爬去音乐_Python爬虫——分析酷我音乐网站 并爬取歌曲-Go语言中文社区

python爬去音乐_Python爬虫——分析酷我音乐网站 并爬取歌曲-Go语言中文社区

时间:2023-07-20 19:24:02

相关推荐

python爬去音乐_Python爬虫——分析酷我音乐网站 并爬取歌曲-Go语言中文社区

前言:

爬取数据,我们都先必须了解开发者工具的使用和网页的源代码,即Python导入第三方库的步骤。

开发者工具使用步骤:

使用F12或者Ctrl+Shirt+i打开开发者工具

说明:

1)先检查HTML的结构是不是对的,再检查样式有没有问题

2)Ctrl+滚轮,可以放大开发者工具代码大小

3)左边是HTML元素结构,右边是CSS样式

4)右边CSS样式可以改动数值和颜色查看更改后效果;

点击Network

分析酷我音乐网站

第一步:先播放音频文件

第二步获取到一首歌的URL播放地址

**Request URL ** 代表着要请求网址的URL

Request Method代表着网址的请求方式,通常的请求方式为(GET请求、POST请求)

Status Code:代表着请求网站的状态码

状态码解释地址

写入一首歌的教程

# -*- coding: utf-8 -*-

# @Time : /12/23 13:00

# @Author : 大数据小J

# @File : 测试数据.py

# @Software: PyCharm

# 导入第三库 pip install requests

import requests

# 爬取一首歌的步骤

with open('酷我音乐/我是如此相信.mp3','wb')as f:

url = 'https://eb-/5a767c337ce097f62967b2ac0f8d5b78/5e005045/resource/n3/25/23/2765484690.mp3'

music = requests.get(url)

f.write(music.content)

f.close()

那么需求来了

如果我想要获取歌手的第一页的所有歌曲怎么办

如果我想获取歌手的所有的歌曲怎么办

我不仅要获取歌手的歌曲,还要获取歌手的歌曲名字,该怎么办?

进入正题,开始分析

在网站中每一首歌都会有着网站标识的id值,这个id值相当于人的身份证,每个人都有着自己的身份标识。

第一步:先分析第一首歌有没有什么内容

第二步:大家会发现最后一个网站会包含着歌曲的数据

该URL对应着rid值是怎么来的

第三步:我们可以查找该对应的歌曲名字会发现相对应的数值

会发现该歌曲rid值,在一个URL链接中存放着

所以得出以下结论:

该网站存放对应第一页URL数据

/api/www/search/searchMusicBykeyWord?key=%E5%91%A8%E6%9D%B0%E4%BC%A6&pn=1&rn=30&reqId=f4ad9b80-2549-11ea-92dc-b1e779c8d1d6

每一首歌有对应的着rid存放数据的URL

/url?format=mp3&rid=83728113&response=url&type=convert_url3&br=128kmp3&from=web&t=1577081015618&reqId=f4af2221-2549-11ea-92dc-b1e779c8d1d6

开始撸代码

# -*- coding: utf-8 -*-

# @Time : /12/23 13:54

# @Author : 大数据小J

# @File : 酷我音乐完整版.py

# @Software: PyCharm

import requests

from urllib import parse

import json

# 该网站有反爬机制,要模拟浏览器来进行伪装。

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',

'Referer': '/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6',

'csrf': 'RUJ53PGJ4ZD',

'Cookie': 'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1577029678,1577034191,1577034210,1577076651; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1577080777; kw_token=RUJ53PGJ4ZD'

}

# 该函数功能最终要获取歌曲相对应的id值和歌曲的名字

def get_music_url():

# 把数据存放到列表中

music_list = []

# 歌手的名字

singer = str(input('请输入要下载歌手:'))

# 歌曲的页数

number = int(input('请输入要下载的页数:'))

for i in range(1, number + 1):

parameters = {

'key': singer,

'pn': i,

'rn': 30,

'reqId': 'f4ad9b80-2549-11ea-92dc-b1e779c8d1d6'

}

data = '/api/www/search/searchMusicBykeyWord?'

url_data = parse.urlencode(parameters)

url = data + url_data

music_list.append(url)

return music_list

# 该函数获取对应的rid值和名字

def get_music_data(url):

list_data = []

response = requests.get(url, headers=headers)

html = response.text

result = json.loads(html)

data = result['data']['list']

for i in data:

rid = i['rid']

name = i['name']

list_data.append((rid, name))

return list_data

# 该函数获取歌曲的mp3文件

def get_music_mp3(rid):

list_data = []

url = '/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3&from=web&t=1577081015618&reqId=f4af2221-2549-11ea-92dc-b1e779c8d1d6'.format(

rid)

response = requests.get(url, headers=headers)

html = response.text

result = json.loads(html)

music_url = result['url']

list_data.append(music_url)

return list_data

# 该函数来存放该执行的代码块

def main():

for url in get_music_url():

for i in get_music_data(url):

# 歌曲的rid

rid = i[0]

name = i[1]

for music_url in get_music_mp3(rid):

try:

with open('酷我音乐/{}.mp3'.format(name), 'wb')as f:

print('正在下载{}'.format(name), end='')

music = requests.get(music_url)

f.write(music.content)

f.close()

print('t下载完成')

except:

print('出现错误')

# 在当前模块运行该代码程序

if __name__ == '__main__':

main()

运行结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。