谷歌表格使用ImportXML的XPath查询无法提取嵌套数据问题咨询
ETF国家持仓数据提取解决方案
方案1:精准XPath定位(最优选择)
直接通过板块标题锚定目标区域,无需遍历国家列表,也不需要处理全页文本,稳定性和效率都满足需求,谷歌表格公式如下:
=IF( NOT(ISBLANK(A1)), IMPORTXML( "https://www.etf.com/"&A1, "//h2[contains(normalize-space(),'Top 10 Countries')]/following-sibling::div[1]//div[@class='holdingRow']/*[self::label or self::span[@class='percent']]/text()" ), "" )
效果说明
- 公式会自动按「国家1、占比1、国家2、占比2...」的顺序溢出20行数据(对应10个国家),如果需要把国家和占比合并为单个单元格,可嵌套调整:
=BYROW( WRAPROWS(原公式返回的数组,2), LAMBDA(r,TEXTJOIN("",TRUE,r)) ) - 更换A1单元格的ETF代码即可直接适配其他标的,无需修改XPath逻辑
方案2:正则提取备选(页面结构变更时备用)
如果后续站点调整元素class导致XPath失效,可提取目标板块的全部文本后用正则批量匹配国家和占比组合,公式如下:
=IF( NOT(ISBLANK(A1)), REGEXEXTRACTALL( TEXTJOIN("",TRUE,IMPORTXML("https://www.etf.com/"&A1,"//h2[contains(normalize-space(),'Top 10 Countries')]/following-sibling::div[1]")), "[A-Za-z ]+[0-9]+\.[0-9]+%" ), "" )
内容的提问来源于stack exchange,提问作者Melvin
相关产品推荐
相关产品推荐

