首页 > 解决方案 > Google 电子表格 ImportXML / XPath - 图像损坏的输出

问题描述

我正在尝试使用 XPath 通过 Google 表格中的 ImportXML 函数来抓取我网站的图像。该功能似乎有效,但输出似乎被破坏了。我收到以下损坏的输出,而不是获取图像的 URL:

data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 
520 390"%3E%3C/svg%3E

我正在使用以下 XPath:

//div[contains(@class,'MuiGrid-root-59 jss358 MuiGrid-item-61')]//img/@src

我尝试了几件事,但我现在有点卡住了。有谁知道如何处理(和解决)这个编码错误?

编辑 I:特此还有指向 Google 表格的链接:Google 表格中损坏的示例图片

*编辑二:我注意到图像正在改变,所以上面的 XPath 不再工作了

标签: parsinggoogle-apps-scriptxpathgoogle-sheetsgoogle-sheets-formula

解决方案


当我看到 的 HTML 时https://next.ibood.com/nl/nl/electronics,似乎您要检索的值是由 Javascript 创建的。因此,不幸的是,无法IMPORTXML使用 xpath 直接检索该值。但我注意到您想要的值包含在 HTML 中的 JSON 对象中。但是,不幸的是,数据大小超过 50,000 个字符。Ref在这种情况下,该值无法由 检索IMPORTXML

因此,在这个答案中,我想建议使用由 Google Apps 脚本创建的自定义函数来实现您的目标。

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中。并且,请把=SAMPLE1("https://next.ibood.com/nl/nl/electronics")=SAMPLE2("https://next.ibood.com/nl/nl/electronics")到细胞。由此,检索值。

function SAMPLE1(url) {
  const html = UrlFetchApp.fetch(url).getContentText();
  const str = html.match(/<script id=\"__NEXT_DATA__\" type=\"application\/json\">(.+?)<\/script>/);
  if (str.length == 2) {
    const obj = JSON.parse(str[1].trim());
    const value = obj.props.pageProps.initialReduxState.slotItems.mainOffer.imageSrc;
    if (value) {
      return `https:${value}`;
    }
  }
  return "No value";
}

function SAMPLE2(url) {
  const html = UrlFetchApp.fetch(url).getContentText();
  const str = html.match(/<script id=\"__NEXT_DATA__\" type=\"application\/json\">(.+?)<\/script>/);
  if (str.length == 2) {
    const obj = JSON.parse(str[1].trim());
    const value = obj.props.pageProps.initialReduxState.slotItems.offers.map(({imageSrc}) => `https:${imageSrc}`);
    if (value.length > 0) {
      return value;
    }
  }
  return "No value";
}
  • 在此示例脚本中,首先检索 HTML,检索 JSON 对象,并从解析的 JSON 对象返回值。
  • 当我看到 HTML 数据时,我注意到有 2 种图像源。一个是mainOffer(这个值是通过SAMPLE1().获得的)。另一个是offer(这个值是通过SAMPLE2().获得的)。根据您的问题,我认为您可能想要mainOffer. 但是当我通过浏览器查看时,我注意到网站中的图像与mainOffer. 我不确定这是什么原因。所以我提出了2种模式。

结果:

使用上述脚本时,会得到以下结果。

在此处输入图像描述

参考:


推荐阅读