也许这个问题已经问过了,但这不能解决我的问题。
我尝试使用google spreadsheet
将数据保存到google app script
中。但是它显示了超出内存限制错误。
遵循我的代码:
//new
function getNewTitle() {
var url = "https://www.reddit.com/r/DigitalMarketing.rss?limit=100&after=0";
var fromText = '</updated><title>';
var toText = '</title>';
var content = UrlFetchApp.fetch(url).getContentText();
var scraped = Parser.data(content).from(fromText).to(toText).iterate();
return scraped;
}
function getNewContent() {
var url = "https://www.reddit.com/r/DigitalMarketing.rss?limit=10&after=0";
var content = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(content);
var root = document.getRootElement();
var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
Logger.log(atom);
var fromText = '<content type="html"><!-- SC_OFF --><div class="md"><p>';
var toText = '</div>';
var scraped = Parser.data(content).from(fromText).to(toText).iterate();
return scraped;
}
function getNewLink() {
var url = "https://www.reddit.com/r/DigitalMarketing.rss?limit=10&after=0";
var fromText = '<link href="';
var toText = '" /><updated>';
var content = UrlFetchApp.fetch(url).getContentText();
var scraped = Parser.data(content).from(fromText).to(toText).iterate();
return scraped;
}
function SAVE_DATA() {
var sheet = SpreadsheetApp.openById('1No3m_FnhyxIaxj2zSlbHrg8HLBJULGQ2bda65hpKlyY').getSheetByName('sample');
var content = getNewContent();
var title = getNewTitle();
var link = getNewLink();
Logger.log(title[1]);
for(var i =0; i < title.length; i++) {
sheet.appendRow([ 'Reddit','wordpress', title[i], link[i], content[i]]);
}
}
//new
在我上面的代码中,试图保存url
中的数据。
但是我遇到
Exceeded memory limit
错误。
在我的日志中,我收到了此消息
[18-07-21 05:33:29:719 PDT] [命名空间:前缀“”映射到URI“ http://www.w3.org/2005/Atom”]
请帮助我解决此错误...!
谢谢。
答案 0 :(得分:2)
我认为错误的原因是从</div>
检索到的var toText = '</div>';
中不包含content
的{{1}}。那修改呢?
https://www.reddit.com/r/DigitalMarketing.rss?limit=10&after=0
中的</div>
未包含在var toText = '</div>';
中。因此,在此修改中,我使用了content
。因为您将</content>
用于'<content type="html"><!-- SC_OFF --><div class="md"><p>'
。fromText
代替setValues()
用于放置值。
appendRow()
和setValues()
之间的成本差异。appendRow()
请从以下位置修改
来自:getNewContent()
至 :
var toText = '</div>';
var toText = '</content>';
请进行如下修改。
SAVE_DATA()
function SAVE_DATA() {
var sheet = SpreadsheetApp.openById('1No3m_FnhyxIaxj2zSlbHrg8HLBJULGQ2bda65hpKlyY').getSheetByName('sample');
var content = getNewContent();
var title = getNewTitle();
var link = getNewLink();
var values = title.map(function(e, i){return [e, link[i], content[i]]});
sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
}
用于var toText = '</content>';
。如果要检索网站的其他范围,请对此进行修改。getNewContent()
。但是为链接和内容设置了limit=100
。因此,当检索值并将其放入电子表格时,链接和内容在11行中变得不确定。
如果我误解了你的问题,对不起。