You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何爬取JOOX音乐榜单并去重导出为Excel文件

解决JOOX香港音乐榜单爬取与结构化导出问题

问题分析

你原代码直接抓取带有jsx-2493651356类的所有元素,导致结果重复混乱——因为这个类被歌曲名标签、链接标签等多个元素复用。正确的做法是先定位单首歌曲的完整容器,再从容器内精准提取排名、歌手、歌曲名。

完整解决方案代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 模拟浏览器请求头,避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

# 请求榜单页面
url = 'https://www.joox.com/hk/chart/1'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 存储结构化数据的列表
chart_data = []

# 定位每首歌曲的容器(注意:动态类名可能随网站更新变化,需定期验证)
song_items = soup.find_all('div', class_='jsx-3835762193 chart-item')

for item in song_items:
    # 提取排名
    rank = item.find('div', class_='jsx-3835762193 rank').get_text(strip=True)
    # 提取歌曲名
    song_name = item.find('b', class_='jsx-2493651356 SongName').find('a').get_text(strip=True)
    # 提取歌手名
    artist = item.find('span', class_='jsx-2493651356 singer-name').get_text(strip=True)
    
    # 添加到列表
    chart_data.append({
        'Ranking': rank,
        'Artist': artist,
        'Song': song_name
    })

# 转换为DataFrame并导出到Excel
df = pd.DataFrame(chart_data)
df.to_excel('joox_hk_chart.xlsx', index=False)

print("数据已成功导出到joox_hk_chart.xlsx")

关键说明

  1. 请求头设置:添加User-Agent模拟浏览器请求,避免被网站的反爬机制拦截。
  2. 容器定位:通过歌曲条目容器(如chart-item类)确保每首歌的信息只被抓取一次,避免重复。
  3. 动态类名注意:JOOX的类名是动态生成的(如jsx-3835762193),如果后续代码失效,需打开浏览器开发者工具,重新查看当前页面的元素类名。
  4. Excel导出:使用pandas的to_excel方法快速完成结构化数据的导出,需提前安装依赖包:pip install pandas openpyxl。

内容的提问来源于stack exchange,提问作者Hello Apple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:15:41