IMPORTXML因/div[2]/div[3]定位错误导致抓取数据错位的问题排查
解决Google Sheets IMPORTXML抓取舞曲榜的错位问题
问题根源
你当前的公式把榜单位置里的数字标签和NEW/Re标记标签全部抓取到同一个列表中,再用WRAPROWS(2)拆分时,多余的NEW/Re会打乱列结构,导致数据错位。另外,依赖硬编码的div序号(如/div[3]/div[2])定位元素非常不稳定,页面结构微调就会失效。
修复方案
改用分别抓取排名和歌曲名称的方式,通过元素class精准定位,避免混入无关标签:
=LET( ranks, IMPORTXML("https://www.officialcharts.com/charts/dance-singles-chart/20240212/104/", "//div[contains(@class,'chart-entry')]/div/div[1]/p/span[1]"), titles, IMPORTXML("https://www.officialcharts.com/charts/dance-singles-chart/20240212/104/", "//div[contains(@class,'chart-entry')]/div/div[2]/p/a/span"), HSTACK(ranks, titles) )
关键调整点
- 用
div[contains(@class,'chart-entry')]定位每个榜单条目,比硬编码div序号更抗页面更新 - 排名的XPath
/div[1]/p/span[1]只抓取每个条目里的第一个span(即纯数字排名),自动排除旁边的NEW/Re标记 - 用
HSTACK直接合并排名和歌曲名列表,无需再用WRAPROWS处理,彻底避免错位
如果仍有个别排名混入标记,可在排名的XPath里加上过滤条件,确保只提取纯数字:
ranks, IMPORTXML("https://www.officialcharts.com/charts/dance-singles-chart/20240212/104/", "//div[contains(@class,'chart-entry')]/div/div[1]/p/span[translate(., '0123456789', '') = '']"),
内容的提问来源于stack exchange,提问作者Dean Powell
相关产品推荐
相关产品推荐

