使用Google Apps脚本进行网页抓取

时间:2016-07-30 17:23:15

标签: google-apps-script web-scraping

我尝试使用Google Apps脚本从以下示例网页中提取数据:

url = http://www.premierleague.com/players/2064/Wayne-Rooney/stats?se=54

使用,UrlFetchApp.Fetch(url)

问题是,当我使用UrlFetchApp.Fetch(url)执行此操作时,我无法获取由' se'定义的页面信息。 url中的参数。相反,我会获得有关以下网址的信息,因为它看起来像是' se = 54'页面是异步加载的: http://www.premierleague.com/players/2064/Wayne-Rooney/stats

有没有办法传递参数' se'其他一些方式?我正在查看该功能,并且它允许指定'选项',因为它们被引用,但有关该主题的文档非常有限。

任何帮助都将非常感激。非常感谢

托米

2 个答案:

答案 0 :(得分:6)

在浏览器中访问该网站并打开开发人员工具(F12或ctr-shift-i)。单击网络选项卡,然后使用F5重新加载页面。 将出现一个请求列表。在列表的底部,您应该看到为获取信息而发出的异步请求。这些请求从footballapi.pulselive.com以json格式获取数据。 您可以在应用脚本中执行相同的操作。但你必须发送一个正确的"起源"标题行或您的请求被拒绝。 这是一个例子。

function fetchData() {
  var url = "http://footballapi.pulselive.com/football/stats/player/2064?comps=1";
  var options = {
    "headers": {
      "Origin": "http://www.premierleague.com"
    }
  }
  var json = JSON.parse(UrlFetchApp.fetch(url, options).getContentText()); 
  for(var i = 0; i < json.stats.length; i++) {
    if(json.stats[i].name === "goals") Logger.log(json.stats[i]);
  }
}

答案 1 :(得分:3)

请尝试以下解决方案:

var options =
{
   "method"  : "GET",   
   "followRedirects" : true,
   "muteHttpExceptions": true
};

var result = UrlFetchApp.fetch(url, options);