【发布时间】:2016-11-29 20:01:45
【问题描述】:
我想从 Google 表格中的亚马逊产品页面获取产品标题。
我已经搜索并尝试了不同的方法并想出了这个
=ImportXML("https://www.amazon.com/dp/B01MSR8J29","//*[@id='productTitle']")
我想得到标题: 军旗衬衫:成为兄弟军 T 恤
但我收到错误,导入的内容为空。
【问题讨论】:
标签: xpath import google-sheets
我想从 Google 表格中的亚马逊产品页面获取产品标题。
我已经搜索并尝试了不同的方法并想出了这个
=ImportXML("https://www.amazon.com/dp/B01MSR8J29","//*[@id='productTitle']")
我想得到标题: 军旗衬衫:成为兄弟军 T 恤
但我收到错误,导入的内容为空。
【问题讨论】:
标签: xpath import google-sheets
大部分 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,包括这个活动是否符合亚马逊服务条款的问题。
【讨论】:
您可以只使用//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","")
【讨论】: