爬取Billboard Global 200榜单无法获取在榜周数求助
解决Billboard Global 200榜单在榜周数爬取问题
要获取歌曲的在榜周数,你可以通过元素的data-testid属性定位,这种方式比单纯依赖类名更稳定(页面样式类可能随网站更新变动)。当前Billboard Global 200页面中,在榜周数的数值对应data-testid="weeks-on-chart-value"的span标签。
修改后的完整代码如下:
import requests from bs4 import BeautifulSoup source = requests.get('https://www.billboard.com/charts/billboard-global-200/') source.raise_for_status() soup = BeautifulSoup(source.text, 'html.parser') music = soup.find_all('div', class_='o-chart-results-list-row-container') for songs in music: songTitle = songs.find('h3').text.strip() songArtist = songs.find('h3').find_next('span').text.strip() songRank = songs.find('span').text.strip() # 获取在榜周数,处理无数据的情况 weeks_element = songs.find('span', {'data-testid': 'weeks-on-chart-value'}) WeeksOnChart = weeks_element.text.strip() if weeks_element else '0' print(f"排名: {songRank}, 歌曲: {songTitle}, 歌手: {songArtist}, 在榜周数: {WeeksOnChart}")
说明:
- 新增了
weeks_element变量先判断元素是否存在,避免因新上榜歌曲无在榜周数导致的AttributeError - 如果找不到对应元素,默认返回
'0',你可以根据需求改成空字符串或其他值
内容的提问来源于stack exchange,提问作者neiq
相关产品推荐
相关产品推荐

