我希望在谷歌脚本中构建一个刮刀。有两个同名的classe,我找不到第二堂课的方法。它只输出第一个。
function myFunction() {
var url = "https://www.zchocolat.com/shop/fr/livraison-cadeau-chocolat/espagne";
var fromText = '<p class="article"';
var toText = '">';
var content = UrlFetchApp.fetch(url).getContentText();
var scraped = Parser
.data(content)
.setLog()
.from(fromText)
.to(toText)
.build();
Logger.log(scraped);
return scraped;
}
function SAVE_DATA() {
var sheet = SpreadsheetApp.openById('').getSheetByName('Feuille 1');
sheet.appendRow([ new Date(), myFunction() ]);
}
答案 0 :(得分:4)
这个样本怎么样?
Parser
库时,似乎可以使用iterate()
将数据检索为数组。当这些内容反映到您的脚本时,修改后的脚本如下所示。
function myFunction() {
var url = "https://www.zchocolat.com/shop/fr/livraison-cadeau-chocolat/espagne";
var fromText = '<p class="article">';
var toText = '</p>';
var content = UrlFetchApp.fetch(url).getContentText();
var scraped = Parser
.data(content)
.from(fromText)
.to(toText)
.iterate();
Logger.log(scraped[1]);
return scraped;
}
97% de nos colis ont été livrés dans les temps en 2016.
zChocolat a déjà livré avec succès 21,923 cadeaux chocolat en Espagne.
答案 1 :(得分:3)
您应该使用XmlService解析html,以便您可以更轻松地提取所需的节点。这个网站有一些很好的例子(https://sites.google.com/site/scriptsexamples/learn-by-example/parsing-html)
你最终会得到类似的东西:
function myFunction() {
var url = "https://www.zchocolat.com/shop/fr/livraison-cadeau-chocolat/espagne";
var fromText = '<p class="article"';
var toText = '">';
var content = UrlFetchApp.fetch(url).getContentText();
var doc = XmlService.parse(html);
var html = doc.getRootElement();
var articles = getElementsByClassName(html, 'articles');
Logger.log(articles);
}
function getElementsByClassName(element, classToFind) {
var data = [];
var descendants = element.getDescendants();
descendants.push(element);
for(i in descendants) {
var elt = descendants[i].asElement();
if(elt != null) {
var classes = elt.getAttribute('class');
if(classes != null) {
classes = classes.getValue();
if(classes == classToFind) data.push(elt);
else {
classes = classes.split(' ');
for(j in classes) {
if(classes[j] == classToFind) {
data.push(elt);
break;
}
}
}
}
}
}
return data;
}