【问题标题】:google app script Exceeded memory limit谷歌应用脚​​本超出内存限制
【发布时间】:2018-07-21 11:43:42
【问题描述】:

这个问题可能已经问过了,但这并不能解决我的问题。

我尝试使用google app script 将数据保存到google spreadsheet。但它显示 Exceeded memory limit 错误。

按照我的代码:

//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">&lt;!-- SC_OFF --&gt;&lt;div class=&quot;md&quot;&gt;&lt;p&gt;';
    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”]

请帮我解决这个错误...!

提前致谢。

【问题讨论】:

  • 这是哪里的Parser
  • @I'-'我其实在Resources -&gt; Library 中添加了parser
  • 对不起,这是我第一次使用google app script,我不知道如何解决这个问题
  • 您是否尝试将限制从 100 减少到 5
  • @I'-'I Parser 是一个 GAS 库。您可以在here 看到此信息。

标签: google-apps-script web-scraping google-sheets xml-parsing


【解决方案1】:

我认为错误的原因是var toText = '&lt;/div&gt;';&lt;/div&gt;不包含在从https://www.reddit.com/r/DigitalMarketing.rss?limit=10&amp;after=0检索到的content中。那么这个修改怎么样呢?

修改点:

  • var toText = '&lt;/div&gt;'; 中的 &lt;/div&gt; 不包含在 content 中。所以在这个修改中,我使用了&lt;/content&gt;。因为您将'&lt;content type="html"&gt;&amp;lt;!-- SC_OFF --&amp;gt;&amp;lt;div class=&amp;quot;md&amp;quot;&amp;gt;&amp;lt;p&amp;gt;' 用于fromText
  • setValues() 而不是 appendRow() 用于放置值。
    • 您可以在here 看到setValues()appendRow() 之间的成本差异。

修改后的脚本:

1。对于getNewContent()

请修改自

从 :
var toText = '</div>';
到 :
var toText = '</content>';

2。对于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 = '&lt;/content&gt;'; 用于getNewContent()。如果要检索网站的其他范围,请修改此项。
  • 关于URL,设置了标题的limit=100。但是limit=10是为链接和内容设置的。因此,当检索到值并将它们放入电子表格时,链接和内容从 11 行变为未定义。
    • 如果您已经知道这一点,请忽略这一点。

参考:

如果我误解了你的问题,我很抱歉。

【讨论】:

  • 谢谢你的回答兄弟。
  • @Ramesh S 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 2020-04-03
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2019-09-30
相关资源
最近更新 更多