【问题标题】:=importxml, Website to Google Sheets - getting #N/A every time=importxml,网站到 Google 表格 - 每次都获得 #N/A
【发布时间】:2023-01-04 02:26:00
【问题描述】:

网站链接

https://redacted

到目前为止我尝试过的 xml 选项

<span aria-labelledby="amount">722</span>

//*[@id="amount"]/h3/span[2]

/html/body/div[3]/main/div/span/div/div/div[2]/div/div/div[2]/div/div[2]/div[3]/div/div/div/div[2]/div[1]/h3/span[2]

没有工作

尝试从此处 =importxml @“722”的值,无论如何这是 22 年 5 月 5 日的值。

【问题讨论】:

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


    【解决方案1】:

    不幸的是,似乎无法使用 XPath 直接检索您的期望值。因为使用 Javascript 将该值放入 HTML,而 IMPORTXML 无法分析 Javascript 的结果。但是,幸运的是,您的期望值似乎作为 JSON 数据包含在 HTML 中。因此,在这个答案中,我想从 JSON 数据中检索值。

    模式 1:

    在此模式中,使用了 IMPORXML 和 REGEXEXTRACT。

    =ARRAYFORMULA(REGEXEXTRACT(IMPORTXML(A1,"//script[@data-component-name='GetOfferWrapper']"),"defaultEstimatedValue"":(.+?)}"))
    
    • URL https://www.gazelle.com/iphone/iphone-13-pro-max/other/iphone-13-pro-max-1tb-other/498082-gpid 放在单元格“A1”中。

    • 当使用该公式时,获得以下结果。

    模式 2:

    在此模式中,使用了由 Google Apps 脚本创建的自定义函数。从 JSON 数据中检索值时,Google Apps 脚本很有用。当您使用此脚本时,请将以下脚本复制并粘贴到电子表格的脚本编辑器中并保存脚本。并且,请将 =SAMPLE("https://www.gazelle.com/iphone/iphone-13-pro-max/other/iphone-13-pro-max-1tb-other/498082-gpid") 的自定义函数放入单元格。

    function SAMPLE(url) {
      const res = UrlFetchApp.fetch(url).getContentText();
      const data = res.match(/<script.+data-component-name="GetOfferWrapper".+?>([wsS]+?)</script>/);
      if (!data || data.length == 0) return "No data";
      const obj = JSON.parse(data[1]);
      return obj.initState.defaultEstimatedValue;
    }
    
    • URL https://www.gazelle.com/iphone/iphone-13-pro-max/other/iphone-13-pro-max-1tb-other/498082-gpid 放在单元格“A1”中。

    • 使用此公式时,将检索 722 的值。

    笔记:

    • 公式和自定义函数可用于当前 HTML。因此,当 HTML 的规范发生变化时,这些可能无法使用。请注意这一点。

    参考:

    【讨论】:

    • 关于“模式1”,在这种情况下,不需要使用ARRAYFORMULA。就像=REGEXEXTRACT(IMPORTXML(A1,"//script[@data-component-name='GetOfferWrapper']"),"defaultEstimatedValue"":(.+?)}")。我感谢来自匿名的联系。
    【解决方案2】:

    您将需要找到另一个包含您试图抓取的情报的网站。 #N/A 错误是 google 表格不支持导入 JavaScript 元素的结果。您始终可以通过在站点设置中禁用 JS 来检查兼容性,通常只有剩下的才能被废弃。在这种情况下它什么都没有:

    【讨论】:

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