前言:
爬取数据,我们都先必须了解开发者工具的使用和网页的源代码,即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 : 2019/12/23 13:00
# @Author : 大数据小J
# @File : 测试数据.py
# @Software: PyCharm
# 导入第三库 pip install requests
import requests
# 爬取一首歌的步骤
with open('酷我音乐/我是如此相信.mp3','wb')as f:
url = 'https://eb-sycdn.kuwo.cn/5a767c337ce097f62967b2ac0f8d5b78/5e005045/resource/n3/25/23/2765484690.mp3'
music = requests.get(url)
f.write(music.content)
f.close()
那么需求来了
进入正题,开始分析
在网站中每一首歌都会有着网站标识的id值,这个id值相当于人的身份证,每个人都有着自己的身份标识。
第一步:先分析第一首歌有没有什么内容
第三步:我们可以查找该对应的歌曲名字会发现相对应的数值
会发现该歌曲rid值,在一个URL链接中存放着
该网站存放对应第一页URL数据
http://www.kuwo.cn/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
http://www.kuwo.cn/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 : 2019/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': 'http://www.kuwo.cn/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 = 'http://www.kuwo.cn/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 = 'http://www.kuwo.cn/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()