0

我正在尝试获取以下页面

http://www.stluciesheriff.com/inmate_list.php

在 UrlFetchApp 类中使用 fetch() 方法

要让上述页面显示结果,您必须在以下位置提交表单

http://www.stluciesheriff.com/inmate_search.php

我尝试使用 fetch(url,payload) 方法复制表单数据和标题,但对于我的生活,我无法弄清楚如何让它返回我想要的实际数据

这是我的尝试

function grabdata() {
  //var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");

  var postdata = {
    "First":"",
    "Last":"",
    "When":2,
    "Submit":"Search"
  };

  var payload = {
    "method":"POST",
    "payload":postdata
  };

  var data = UrlFetchApp.fetch("http://www.stluciesheriff.com/inmate_list.php",payload);
  Logger.clear();
  Logger.log(data.getContentText());
  return e; // intentional error thrown for debugger
}

我有一种感觉,我错过了一些明显的东西,因为我从来没有真正体验过从需要 POST 数据的网站获取数据。

4

1 回答 1

0

您可以使用Google 提供的Xml 服务。Xml 库可以将 html 一直解析到您需要的特定元素。我使用 Chrome 检查器来确定我需要哪个元素。

我写了一些示例脚本来帮助你。

  var data = UrlFetchApp.fetch("http://www.stluciesheriff.com/inmate_list.php",payload);
  var entries = [];
  var xml = Xml.parse(data.getContentText(), true);
  var resultTable = xml.getElement().getElement("body").getElement("table").getElements("tr")[2]
        .getElements("td")[1].getElement("table").getElements("tr")[4].getElement("td").getElement("table");
  var tableRows = resultTable.getElements("tr");
  for (var i=1; i<tableRows.length; i++) {
    entries.push(extractDataFromRow(tableRows[i]));
  }

  Logger.log(Utilities.jsonStringify(entries));
  return entries;
}

function extractDataFromRow(row) {
  var obj = {};
  var tds = row.getElements("td");
  obj.name = tds[0].getElement("a").getText();
  obj.dob = tds[1].getText();
  obj.age = tds[2].getText();
  obj.inmate_id = tds[3].getText();
  obj.booking = tds[4].getText();
  return obj;
}
于 2013-03-12T04:18:14.900 回答