我有以下数据抓取脚本(使用 Parse 库):
function getData() {
var sheet = SpreadsheetApp.openById('my_id').getSheetByName('Sheet2');
var urls = sheet.getDataRange().getValues();
for(var i = 0; i < urls.length; i++) {
var sheet = SpreadsheetApp.openById('my_id').getSheetByName("Sheet5"); // insert Spreadsheet Id and Sheet name
var url = urls[i]
var fromText = '<span class="nb-shares">';
var toText = '</span>';
var content = UrlFetchApp.fetch(url).getContentText();
var scraped = Parser
.data(content)
.from(fromText)
.to(toText)
.build();
sheet.appendRow([ url,scraped ]);
}
}
它工作得很好,但是我很难处理输出。我从sheet2的第一列获取我的url,所以基本上是A1:A
,我想在B1:B
列中传递我的脚本的响应同一张纸。
appendRow
只需复制同一列中的值,但复制到我的网址列表下的行中。
最佳答案
你不需要调用sheet
两次,我看到一个是sheet2,另一个是sheet5。这是正确的还是你只是想像你说的那样将其放在sheet2上?如果只是sheet2,请删除for循环中的varsheet
,然后尝试sheet.getRange(i+1,2).setValue(scraped)
这应该适合你正在做,但是如果您将响应放入数组中,然后将该数组设置到之后的工作表中,您的脚本运行速度会快得多。任何时候脚本与工作表进行通信都需要时间,这就是为什么我们尝试减少调用工作表的时间。
要执行此操作:
function getData() {
var sheet = SpreadsheetApp.openById('my_id').getSheetByName('Sheet2');
var urls = sheet.getDataRange().getValues();
var myNewArray = [];
for(var i = 0; i < urls.length; i++) {
var url = urls[i]
var fromText = '<span class="nb-shares">';
var toText = '</span>';
var content = UrlFetchApp.fetch(url).getContentText();
var scraped = Parser
.data(content)
.from(fromText)
.to(toText)
.build();
myNewArray.push([scraped]);
}
sheet.getRange(1,2,myNewArray.length,1).setValues(myNewArray);
}
这是一个更快的方法,您不会遇到 Google 对其脚本的 6 分钟限制。
两种不同的方法,但如果您想要做的只是将响应放在 URL 一侧,则可以使用我在第一部分中向您展示的代码。
关于javascript - 从一列中抓取数据并将结果传递到旁边的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39793542/