【问题标题】:Extracting a table in Google Apps Script using UrlFetchApp使用 UrlFetchApp 在 Google Apps 脚本中提取表
【发布时间】:2016-07-30 07:06:18
【问题描述】:

我想从以下链接导入值: NSE

我试过下面的代码:

function extract() {
  var html = UrlFetchApp.fetch('nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?symbol=NIFTY').getContentText();
  var doc = XmlService.parse(html);
  var html = doc.getRootElement();
  var menu = getElementsByClassName(html, 'opttbldata')[0];
  var output = '';
  var linksInMenu = getElementsByTagName(menu, 'th');
  for(i in linksInMenu) output+= XmlService.getRawFormat().format(linksInMenu[i])+'<br>';
  return HtmlService.createHtmlOutput(output);
  //Logger.log(menu);
};


function getElementById(element, idToFind) {  
  var descendants = element.getDescendants();  
  for(i in descendants) {
    var elt = descendants[i].asElement();
    if( elt !=null) {
      var id = elt.getAttribute('id');
      if( id !=null && id.getValue()== idToFind) return elt;    
    }
  }
};


function getElementsByClassName(element, classToFind) {  
  var data = [];
  var descendants = element.getDescendants();
  descendants.push(element);  
  for(i in descendants) {
    var elt = descendants[i].asElement();
    if(elt != null) {
      var classes = elt.getAttribute('class');
      if(classes != null) {
        classes = classes.getValue();
        if(classes == classToFind) data.push(elt);
        else {
          classes = classes.split(' ');
          for(j in classes) {
            if(classes[j] == classToFind) {
              data.push(elt);
              break;
            }
          }
        }
      }
    }
  }
  return data;
};


function getElementsByTagName(element, tagName) {  
  var data = [];
  var descendants = element.getDescendants();  
  for(i in descendants) {
    var elt = descendants[i].asElement();     
    if( elt !=null && elt.getName()== tagName) data.push(elt);      
  }
  return data;
};

但我收到以下错误:
返回代码 403。截断的服务器响应:拒绝访问

访问被拒绝

您没有权限访问“http://nseindia...(使用 muteHttpExceptions 选项检查完整响应)(第 2 行,文件“代码”)

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    该网站检查用户代理以拒绝来自任何非浏览器的请求。不幸的是,应用程序脚本不允许您更改用户代理,因此您根本无法使用 UrlFetchApp 加载该站点,除非您设法使用允许您伪造用户代理的代理服务器。

    【讨论】:

    • 谢谢!你能帮我通过使用代理服务器来实现它(如果可能的话)吗?
    • 我不知道任何现有的代理可以从应用程序脚本中使用并允许您伪造用户代理标头。您或您的公司是否拥有自己的服务器?在这种情况下,您可以使其充当代理。或者,也许您可​​以找到另一个提供与 nseindia 相同信息的网站。另一种解决方案是在某处的 PC 上运行一些应用程序,定期从 nseindia 获取数据并将其发送到您的谷歌驱动器。
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多