爬取酷狗音乐TOP榜所有的歌曲信息

一、 构造url:

1. 进入酷狗音乐官方网站,点击酷狗TOP500,查看浏览器地址栏

在这里插入图片描述
可以看到地址为https://www.kugou.com/yy/rank/home/1-8888.html?from=rank;其中各个部分代码的含义如下:

字段含义
https传输协议
www.kugou.com域名
yy/rank/home/abs域名下的子网页
.html代表网页是静态的
代表一种条件,后面接参数
1-88888888可能是端口,1代表当前页面数,TOP500一共有23页,从1-8888到23-8888

2. 知道了地址栏的含义,就可以构造url了,用以下代码构造

urls=['https://www.kugou.com/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)

结果
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值