如何在谷歌应用程序脚本环境中获取谷歌搜索输出?

时间:2015-03-12 16:38:11

标签: javascript google-apps-script google-search

如果我使用下一个功能来获取谷歌输出:

function myFunction() {
  var post_url, result;
  post_url = "http://www.google.com/search?q=stack+overflow";
  result = UrlFetchApp.fetch(post_url);
  Logger.log(result);
}

不起作用。
附: 对不起,我必须要了解一些依赖性。 我举个例子

function scrapeGoogle() {

  var response = UrlFetchApp.fetch("http://www.google.com/search?q=labnol");

  var myRegexp = /<h3 class=\"r\">([\s\S]*?)<\/h3>/gi;

  var elems = response.getContentText().match(myRegexp);

  for(var i in elems) {

    var title = elems[i].replace(/(^\s+)|(\s+$)/g, "")
                        .replace(/<\/?[^>]+>/gi, "");
    Logger.log(title);

  }

}

并且它起作用,比我开始做一些修改并注意到当我在代码中有一些错误时它给了我一个错误

  

http://www.google.com/search?q=labnol返回的代码请求失败   503。

所以我做了一些没有错误的研究,它的解决方案有效。但是当我开始将其形成为lib中的函数时,它每次都会向我抛出503错误! 我对这种行为感到非常惊讶...... 这是短视频,仅供参考。 https://youtu.be/Lem9eiIVY0I
P.P.S. 哦!我打破了一些违规行为,所以谷歌引擎发送给我停止列表 所以我运行这个:

function scrapeGoogle() {
  var options =
     { 
       'muteHttpExceptions': true
     }
  var response = UrlFetchApp.fetch("http://www.google.com/search?q=labnol", options);
  Logger.log(response);
}

并得到
 关于本页

我们的系统检测到来自您计算机网络的异常流量。此页面检查是否确实是您发送请求,而不是机器人。为什么会发生这种情况?

我认为我必须使用一些特殊的谷歌服务来获取搜索输出而不是被禁止?

1 个答案:

答案 0 :(得分:0)

您可以将简单的正则表达式用于extract Google search results

  var regex = /<h3 class=\"r\">([\s\S]*?)<\/h3>/gi;  
  var items = response.getContentText().match(regex);

或者,您可以在工作表中使用ImportXML函数。

  =IMPORTXML(GOOGLE_URL, "//h3[@class='r']")

请参阅:Scrape Google Search with Sheets