google-sheets - 将亚马逊列表中的文本提取到 Google 表格中的最佳方法是什么?
问题描述
目的: 我正在尝试将 Amazon.com 列表中的产品特征(要点)提取到 Google 电子表格中。
问题: 我尝试了 4 种不同的方法,但都没有奏效。
- 导入XML:
IMPORTXML("https://www.amazon.com/dp/B07JD2GDKN","//ul/li/showHiddenFeatureBullets")
- 导入HTML:
IMPORTHTML("https://www.amazon.com/dp/B07JD2GDKN","list",1)
- 正则表达式替换(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。例如,功能 5 具有以下功能:
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)
希望这会有所帮助,我知道这不是一个完美的解决方案,但它可以为我完成工作。
推荐阅读
- powershell - 无法使用powershell生成的随机密码打开7z文件
- mysql - 基于角色的访问控制 MySql 实现
- git - 在 Windows 上使用 Git Bash,如何签出以 Unicode 字符开头的分支?
- php - 在 Laravel 中插入数据的最快方法
- spring - 无法比较字符串
- javascript - JS - 从同一类中的其他方法调用类中的方法
- sequelize.js - 按第一个模型排序
- javascript - 带有 JavaScript 的 For-Loop,得到 1 个不在循环中的 inc 编号
- python - 循环遍历熊猫数据框并应用条件的正确方法是什么?
- javascript - 节点js中的动态导出变量