我正在尝试使用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的电子表格
答案 0 :(得分:3)
这个答案怎么样?
不幸的是,无法使用//span[contains(text(),'Tracks This Index:')]/following-sibling::span
的xpath从URL的HTML数据检索该值。例如,即使使用//span
,也将返回#N/A
。 Rubén's answer中提到了此问题的原因。
在这里,我想提出一种解决方法。请认为这只是几个答案之一。在这种解决方法中,从body
的所有值中检索所需的值。尽管无法检索主体中的每个标签,但是可以检索//body
。幸运的是,您所需的值包含在//body
中的值中。此解决方法的流程如下。
//body
的xpath检索值。=TEXTJOIN("",TRUE,IFNA(ARRAYFORMULA(TRIM(REGEXEXTRACT(IMPORTXML(A1,"//body"),"Tracks This Index: (\w.+)"))),""))
https://etfdb.com/etf/VOO
。//body
的值之后,该值由正则表达式检索。
如果这不是您想要的方向,我深表歉意。
答案 1 :(得分:1)
这是部分答案。
发生此问题是因为https://etfdb.com/etf/VOO/
不是有效的XHTML
文件。
某些故障:
<hr>
代替<hr/>
<br>
代替<br/>
上述失败导致IMPORTXML
无法解析同级标记下方。