【发布时间】:2022-01-22 18:03:20
【问题描述】:
我创建了一个脚本,使用谷歌应用脚本从webpage 中抓取两个字段。该脚本似乎工作正常,但它以每行为基础将结果写入电子表格。
我所做的是从登录页面获取所有商店的链接,然后在另一个函数中重用这些链接来解析内页中的 shop name 和 website link。虽然这两个字段在登录页面中也可用,但我希望从它们的内页解析它们。
但是,我希望将结果写入电子表格中进行批量更新。我怎样才能做到这一点?
目前的做法:
function parseYellowpages() {
var options = {
"method" : "GET",
"headers" : {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"
}
};
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getSheetByName('Sheet1');
var base = "https://www.yellowpages.com"
var webURL = "https://www.yellowpages.com/search?search_terms=pizza&geo_location_terms=New+York%2C+NY";
var row = 1;
var response = UrlFetchApp.fetch(webURL,options);
var $ = Cheerio.load(response.getContentText());
const items = $("[class='result'] [class='info']");
for (i=0;i<items.length;i++){
var shopLink = base + $(items[i]).find('h2[class="n"] > a.business-name').attr('href');
var resultContainer;
resultContainer = getInnerpageInfo(shopLink,options);
activeSheet.getRange(row,1).setValue(resultContainer[0]);
activeSheet.getRange(row,2).setValue(resultContainer[1]);
console.log(resultContainer[0],resultContainer[1]);
row++;
};
}
function getInnerpageInfo(innerLink,options) {
var response = UrlFetchApp.fetch(innerLink,options);
var $ = Cheerio.load(response.getContentText());
var shopName = $('.sales-info > h1').first().text();
var website = $('a.website-link').first().attr('href');
return [shopName,website];
}
如何将结果写入电子表格进行批量更新?
【问题讨论】:
-
我担心在Stackoverflow中,当连续请求完成时,会出现错误。因此,在您的情况下,如果您的预期值可以通过 Stack Exchange API 检索,我建议您使用它。 Ref 但是,如果您不能使用 API,我很抱歉。
-
感谢您的评论@Tanaike。我在上面的脚本中使用的站点链接只是一个占位符。我想知道实现这一目标的逻辑。但是,我故意选择该站点链接,认为它是无害的。
-
@MITHU 使用
example.com作为占位符。不要使用有效链接作为占位符。您的函数名称也表明它是您尝试解析的站点。 -
好的,我现在已经在脚本中更改了站点链接。
-
请edit 明确您的问题,首先编辑标题并显示您尝试使用批量更新的内容。
标签: function google-apps-script web-scraping google-sheets