admin管理员组文章数量:1650903
一、 构造url:
1. 进入酷狗音乐官方网站,点击酷狗TOP500,查看浏览器地址栏
可以看到地址为https://www.kugou/yy/rank/home/1-8888.html?from=rank;其中各个部分代码的含义如下:
字段 | 含义 |
---|---|
https | 传输协议 |
www.kugou | 域名 |
yy/rank/home/abs | 域名下的子网页 |
.html | 代表网页是静态的 |
? | 代表一种条件,后面接参数 |
1-8888 | 8888可能是端口,1代表当前页面数,TOP500一共有23页,从1-8888到23-8888 |
2. 知道了地址栏的含义,就可以构造url了,用以下代码构造
urls=['https://www.kugou/yy/rank/home/{}-8888.html?from=rank'.format(str(i)) for i in range(1,24)]
3. 构造请求头,防止反爬虫
下载fiddler,抓取访问酷狗官网时的包,点击打开,查看user-agent信息
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53\
7.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
二、 通过url获取网页源代码:
1. 下载Requests包
pip install Requests
2. 获取目标网址的网页源代码
response = requests.get(url, headers=headers).text
成功将网页爬取到pycahrm中
三、 使用python的BeautifulSoup库提取所需信息:
1. BeautifulSoup库中有一个select函数,可以通过chrome的selctor自动识别
要截取的目标元素
按F12进入开发模式,找到目标元素对应的代码
右键,复制为selector
提取数据部分代码:
html = BeautifulSoup(html)
names=html.select('#rankWrap > div.pc_temp_songlist > ul > li > a')
#获取歌手和歌曲名称
for name in names:
singer.append(name['title'].split('-')[0])
song.append(name['title'].split('-')[1])
#获取歌曲时长
times = html.select('#rankWrap > div.pc_temp_songlist > ul > li> span.pc_temp_tips_r > span')
for t in times:
l = str(t)
l = re.sub('\s+', ' ', l)
l = re.search("(\d{1,2}:\d{1,2})", l)
time.append(l.group(1))
四、 将获取的数据打包生产JSON格式:
1. 用zip函数将几个list打包并生成JSON格式数据
d=[]
size = list(range(500))
for i, r, p, q in zip(size, singer, song, time):
data = {
'排名': i + 1,
'演唱者': r,
'歌曲名称': p,
'歌曲时长': q
}
d.append(data)
str_json = json.dumps(d, indent=2, ensure_ascii=False)
2. 保存到 'kugou.json文件中
with open('kugou.json, 'w') as f:
f.write(json.dumps(str_json))
五、 测试JSON格式是否正确:
python代码
import json
with open('D:\pythonProject\exp\kugou.json,'r') as f:
str_json=f.read()
str_json=json.loads(str_json)
print(str_json)
结果
版权声明:本文标题:爬取酷狗音乐TOP榜所有的歌曲信息 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729549254a1206017.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论