【问题标题】:Use Google Sheets ImportXML with XPath to import Amazon product title使用带有 XPath 的 Google Sheets ImportXML 导入亚马逊产品标题
【发布时间】:2016-11-29 20:01:45
【问题描述】:

我想从 Google 表格中的亚马逊产品页面获取产品标题。

我已经搜索并尝试了不同的方法并想出了这个

=ImportXML("https://www.amazon.com/dp/B01MSR8J29","//*[@id='productTitle']")

我想得到标题: 军旗衬衫:成为兄弟军 T 恤

但我收到错误,导入的内容为空。

Demo Sheet

【问题讨论】:

    标签: xpath import google-sheets


    【解决方案1】:

    大部分 HTML 不是有效的 XML,尤其是亚马逊的页面不是有效的 XML。所以,importXML 在他们身上失败了。

    您可以通过custom function 使用应用程序脚本,如下所示(删除“amazon”之前的空格,这是为了防止 SO 重写 URL):

    =producttitle("https://www. amazon.com/dp/B01MSR8J29")  
    

    如果在脚本编辑器中输入自定义函数如下:

    function productTitle(url) {   
      var content = UrlFetchApp.fetch(url).getContentText();
      var match = content.match(/<span id="productTitle".*>([^<]*)<\/span>/);
      return match && match [1] ? match[1] : 'Title not found';
    }
    

    这里,第一行获取页面的来源;然后正则表达式提取项目标题。

    你会发现一个类似的帖子here,包括这个活动是否符合亚马逊服务条款的问题。

    【讨论】:

      【解决方案2】:

      您可以只使用//title xpath 和一个简单的正则表达式替换来删除标准的Amazon.com: 部分:

      =REGEXREPLACE(ImportXML("https://www.amazon.com/dp/B01MSR8J29","//title"),"Amazon.com: ","")
      

      如果您还想删除面包屑的其余部分,例如: Clothing 只需修改它以使用 OR 符号,在正则表达式中为 |,如下所示:

      =REGEXREPLACE(ImportXML("https://www.amazon.com/dp/B01MSR8J29","//title"),"Amazon.com: |: Clothing","")
      

      【讨论】:

      • 谢谢,效果很好,我还有第二个问题,我希望产品标题链接到 B 列中的 asin 并使其正常工作,但现在我需要在其中获取产品标题不知何故,我更新了演示表以显示我的意思。如果你有时间去看看就好了。
      • 我在您的第二个问题中添加了两种可能性。它们位于样本下方的电子表格中。我添加了第三个,它在公式的所有可能位置使用 ASIN。我还尝试使用数组公式从单个公式生成这些,但 IMPORTXML() 函数不喜欢数组。
      • @Karl_S 我使用了最后一个,它似乎有效,但是对于某些 ASIN 代码,文本变为“机器人检查”而不是产品标题。你知道这是怎么回事吗?我在演示中添加了一个。
      • 当我打开电子表格时,它有“机器人检查”,但在工作...消息清除后(所有公式都已更新),该项目更改为 Im Full of Holiday Spirit Vodka,它被称为T 恤所以可能是由于亚马逊检测到的一些电话或其他物品?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 2017-05-17
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      相关资源
      最近更新 更多