【问题标题】:Why is this Importxml formula not working?为什么这个 Importxml 公式不起作用?
【发布时间】:2021-03-22 02:47:53
【问题描述】:

以下公式适用于某些人,但不适用于其他人:

=IFNA(VALUE(IMPORTXML("https://finance.yahoo.com/quote/C2PU.SI", "//*[@class=""D(ib) Mend(20px)""]/span[1]")))

如果在没有IFNA 的情况下使用,它会显示“找不到 url 的资源”。

这是我想要获取的值:

如果您能指出正确的方向,我将不胜感激。

谢谢!

【问题讨论】:

    标签: xml web-scraping google-sheets google-sheets-formula


    【解决方案1】:

    即使对于简单的 importxml,它也不返回任何值。 该站点似乎是由 javascript 生成的或受保护的,因此无法被 importxml 抓取。

    【讨论】:

    • 嗨!奇怪的是,文件中大约 60% 的行确实带来了值,但不是其中几个,如上图所示。我以为是因为它是基于合资企业的,但由于其中一些出现了,所以我很感兴趣。
    【解决方案2】:

    不要使用“检查”工具,因为它会在 Web 浏览器呈现 DOM 时显示 DOM,包括客户端 JavaScript 对源代码的修改,而是查看源代码。

    资源

    【讨论】:

      【解决方案3】:

      DOM的结构是由javascript生成的。尽管如此,您需要的所有信息都包含在一个名为 root.App.main 的 json 字符串中。您可以通过这些方式获取所有数据

      function extract(url){
        var source = UrlFetchApp.fetch(url).getContentText()
        return source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
      }
      

      然后通过常规的 json 解析来检索数据。这会给你价值

      [![function marketPrice() {
        var code = 'C2PU.SI'
        var url='https://finance.yahoo.com/quote/' + code
        var source = UrlFetchApp.fetch(url).getContentText()
        var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
        var data = JSON.parse(jsonString)
        var regularMarketPrice = data.context.dispatcher.stores.StreamDataStore.quoteData.item(code).regularMarketPrice.raw
        Logger.log(regularMarketPrice)
      }
      Object.prototype.item=function(i){return this\[i\]};][1]][1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多