Google sheets importxml 奇怪的导入 - 无法获得元素的正确路径

Google sheets importxml weird import - Can't get the correct path to elements

我正在尝试使用 IMPORTXML 从该网站 https://etfdb.com/etf/VOO/ 获取一些数据。不幸的是,我无法抓取页面的特定元素,而是只能从这两个函数中获取数据

=IMPORTXML("https://etfdb.com/etf/VOO","//*")

=IMPORTXML("https://etfdb.com/etf/VOO","/html")

我试图查看浏览器是否仅通过 JS 加载数据,但在禁用它后网站加载正确,所以我认为 JS 可能不是这里的问题。

为什么在 运行 这样一个简单的函数之后,我得到一个错误,说抓取的内容是空的?

//span[contains(text(),'Tracks This Index:')]/following-sibling::span

编辑:添加了具有所需输出的电子表格https://docs.google.com/spreadsheets/d/1Zn0fQwenYZo6u4jP0yZ7J-NCzyzRnqabR3CDUz8jP3E/edit?usp=sharing

这是部分答案。

出现此问题是因为 https://etfdb.com/etf/VOO/ 不是有效的 XHTML 文件。

一些失败:

  • 使用 <hr> 代替 <hr/>
  • 使用 <br> 而不是 <br/>

以上失败导致IMPORTXML无法解析下面的兄弟标签。

这个答案怎么样?

问题:

不幸的是,无法使用 //span[contains(text(),'Tracks This Index:')]/following-sibling::span 的 xpath 从 URL 的 HTML 数据中检索该值。例如,即使使用 //span,也会返回 #N/A.

提到了这个问题的原因

解决方法:

在这里,我想提出一个解决方法。请将此视为几个答案之一。在此解决方法中,您需要的值是从 body 的所有值中检索的。虽然无法检索正文中的每个标签,但可以检索//body。幸运的是,您想要的值包含在 //body 的值中。此解决方法的流程如下。

  1. //body 的 xpath 中检索值。
  2. 通过正则表达式检索你想要的值。

示例公式:

=TEXTJOIN("",TRUE,IFNA(ARRAYFORMULA(TRIM(REGEXEXTRACT(IMPORTXML(A1,"//body"),"Tracks This Index: (\w.+)"))),""))
  • 在此示例中,单元格 "A1" 的 URL 为 https://etfdb.com/etf/VOO
  • 取回//body的值后,通过正则表达式取回该值。
    • 此解决方法的重点在于方法。我认为有多种公式可用于检索值。所以请将上面的示例公式视为其中之一。

结果:

注:

  • 如果将上述公式用于其他URL,可能会出现错误。请注意这一点。

参考文献:

如果这不是您想要的方向,我深表歉意。