Python实现榜单歌曲查询爬虫时返回结果位置偏移问题求解
问题原因
你直接全局搜索页面内所有class="title-artist"的div元素,除了排行榜列表里的100个条目对应元素外,页面顶部的热门展示位也用了相同的类名,相当于你拿到的列表前几位是额外的展示内容,不是排行榜列表里的条目,所以才会出现位次偏移的情况。
修复方案
先定位到排行榜的专属容器,再在容器内搜索歌曲条目,就能保证拿到的列表顺序和排行榜位次完全对应,修改后的代码如下:
import requests from bs4 import BeautifulSoup url = 'https://www.officialcharts.com/charts/singles-chart/' req = requests.get(url) soup = BeautifulSoup(req.content, 'html.parser') # 先定位排行榜列表容器,再搜索对应元素,排除顶部多余内容 chart_container = soup.find("div", class_="chart-positions") title_artist_list = chart_container.find_all("div", class_="title-artist") print("") print("输入查询位次") user_pos = int(input("请输入1-100之间的数字: ")) if 1 <= user_pos <= 100: hit = title_artist_list[user_pos - 1] title, artist = [hr.text.strip() for hr in hit.findAll("a")] print("位次 | 歌曲名 | 演唱者") print(user_pos, "|", title, "|", artist) else: print("请输入1-100范围内的数字")
注:原代码开头的lol = input("Number: ")和对应判断逻辑属于多余代码,已经删除,如果你有其他分支功能可以保留,不影响位次偏移问题的修复效果。额外加了strip()处理文本,可去掉内容前后多余的换行和空格,输出格式更整洁。
内容的提问来源于stack exchange,提问作者Edit
相关产品推荐
相关产品推荐

