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

    科技2025-11-09  10

    一、 构造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)

    结果

    Processed: 0.013, SQL: 9