目的:我正在尝试从 Amazon.com 列表中提取产品功能(要点(到Google电子表格中。
问题:我尝试了4种不同的方法,但没有一种有效。
- IMPORTXML:
IMPORTXML("https://www.amazon.com/dp/B07JD2GDKN","//ul/li/showHiddenFeatureBullets")
- IMPORTHTML:
IMPORTHTML("https://www.amazon.com/dp/B07JD2GDKN","list",1)
- REGEXREPLACE(IMPORTXML(:
REGEXREPLACE(IMPORTXML("https://www.amazon.com/dp/B07JD2GDKN","//feature-bullets"),"Amazon.com: ","")
- 自定义函数:
productFeatures ("https://www.amazon.com/dp/B07JD2GDKN")
function productFeatures(url) {
var content = UrlFetchApp.fetch(url).getContentText();
var match = content.match(/<span class="a-list-item">/);
return match && match [1] ? match[1] : 'Title not found';
}
// via https://screencast.com/t/pkxiFcg6my
<小时 />:
这是我得到的回复:
自定义功能:(https://screencast.com/t/WL9Ay6UQemK(
运行"IMPORTHTML"的响应:"导入内容为空">
运行"IMPORTXML"的响应:"无法解析导入的 Xml 内容。
目标:我将不胜感激任何帮助解决这个问题。
我不是正则表达式的专家,但经过一些研究,我能够让它工作:
我使用下面的自定义函数来获取第一个要点
function BP1(url) {
var content = UrlFetchApp.fetch(url).getContentText();
var match = content.match(/<li><span.*>([^<]*)</span></li>/g);
return match && match ? match[7]: 'BP not found';
}
对于每个后续产品功能,我刚刚创建了一个相应的函数,将匹配数提高 1。例如,功能五具有以下功能:
function BP5(url) {
var content = UrlFetchApp.fetch(url).getContentText();
var match = content.match(/<li><span.*>([^<]*)</span></li>/g);
return match && match ? match[12]: 'BP not found';
}
唯一的问题是它会在前面和后面拉xml文本。我猜对这一切有更多了解的人可以解决这个问题。我只使用 LEFT((、RIGHT(( 和 LEN(( 函数来清理结果
=LEFT(RIGHT(bp1(url), LEN(bp1(url))-39),LEN(bp1(url))-66)
希望这有帮助,我知道这不是一个完美的解决方案,但它可以为我完成工作。