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
的值中。此解决方法的流程如下。
- 从
//body
的 xpath 中检索值。
- 通过正则表达式检索你想要的值。
示例公式:
=TEXTJOIN("",TRUE,IFNA(ARRAYFORMULA(TRIM(REGEXEXTRACT(IMPORTXML(A1,"//body"),"Tracks This Index: (\w.+)"))),""))
- 在此示例中,单元格 "A1" 的 URL 为
https://etfdb.com/etf/VOO
。
- 取回
//body
的值后,通过正则表达式取回该值。
- 此解决方法的重点在于方法。我认为有多种公式可用于检索值。所以请将上面的示例公式视为其中之一。
结果:
注:
- 如果将上述公式用于其他URL,可能会出现错误。请注意这一点。
参考文献:
如果这不是您想要的方向,我深表歉意。
我正在尝试使用 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
的值中。此解决方法的流程如下。
- 从
//body
的 xpath 中检索值。 - 通过正则表达式检索你想要的值。
示例公式:
=TEXTJOIN("",TRUE,IFNA(ARRAYFORMULA(TRIM(REGEXEXTRACT(IMPORTXML(A1,"//body"),"Tracks This Index: (\w.+)"))),""))
- 在此示例中,单元格 "A1" 的 URL 为
https://etfdb.com/etf/VOO
。 - 取回
//body
的值后,通过正则表达式取回该值。- 此解决方法的重点在于方法。我认为有多种公式可用于检索值。所以请将上面的示例公式视为其中之一。
结果:
注:
- 如果将上述公式用于其他URL,可能会出现错误。请注意这一点。
参考文献:
如果这不是您想要的方向,我深表歉意。