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

时间:2019-09-08 06:39:23

标签: xpath google-sheets google-sheets-formula google-sheets-importxml

我正在尝试使用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的电子表格

2 个答案:

答案 0 :(得分:3)

这个答案怎么样?

问题:

不幸的是,无法使用//span[contains(text(),'Tracks This Index:')]/following-sibling::span的xpath从URL的HTML数据检索该值。例如,即使使用//span,也将返回#N/ARubén's answer中提到了此问题的原因。

解决方法:

在这里,我想提出一种解决方法。请认为这只是几个答案之一。在这种解决方法中,从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的值之后,该值由正则表达式检索。
    • 此替代方法的重点是方法。我认为有多种获取价值的公式。因此,请仅将上述示例公式视为其中之一。

结果:

enter image description here

注意:

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

参考文献:

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

答案 1 :(得分:1)

这是部分答案。

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

某些故障:

  • 使用<hr>代替<hr/>
  • 使用<br>代替<br/>

上述失败导致IMPORTXML无法解析同级标记下方。