第1行错误:序言中不允许包含内容

时间:2018-10-31 10:30:07

标签: google-apps-script web-scraping html-parsing

我正在尝试使用以下代码从此website抓取价格数据表;

function scrapeData() {
// Retrieve table as a string using Parser.
var url = "https://stooq.com/q/d/?s=barc.uk&i=d";

var fromText = '<td align="center" id="t03">';
var toText = '</td>';
var content = UrlFetchApp.fetch(url).getContentText();
var scraped = Parser.data(content).from(fromText).to(toText).build();

//Parse table using XmlService.
var root = XmlService.parse(scraped).getRootElement();
}

我从类似问题here中使用的方法中采用了这种方法,但是该方法在该特定网址上失败并给我错误;

Error on line 1: Content is not allowed in prolog. (line 12, file "Stooq")

在相关问题herehere中,他们谈论的文本内容不接受提交给解析器,但是,我无法将这些问题中的解决方案应用于我自己的问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

此修改如何?

修改点:

  • 在这种情况下,需要修改检索到的HTML值。例如,运行var content = UrlFetchApp.fetch(url).getContentText()时,不包含每个属性值。这些需要进行修改。
  • 标题中有一个合并的列。

当以上几点反映到脚本中时,它如下所示。

修改后的脚本:

function scrapeData() {
  // Retrieve table as a string using Parser.
  var url = "https://stooq.com/q/d/?s=barc.uk&i=d";
  var fromText = '#d9d9d9}</style>';
  var toText = '<table';
  var content = UrlFetchApp.fetch(url).getContentText();
  var scraped = Parser.data(content).from(fromText).to(toText).build();

  // Modify values
  scraped = scraped.replace(/=([a-zA-Z0-9\%-:]+)/g, "=\"$1\"").replace(/nowrap/g, "");

  // Parse table using XmlService.
  var root = XmlService.parse(scraped).getRootElement();

  // Retrieve header and modify it.
  var headerTr = root.getChild("thead").getChildren();
  var res = headerTr.map(function(e) {return e.getChildren().map(function(f) {return f.getValue()})});
  res[0].splice(7, 0, "Change");

  // Retrieve values.
  var valuesTr = root.getChild("tbody").getChildren();
  var values = valuesTr.map(function(e) {return e.getChildren().map(function(f) {return f.getValue()})});
  Array.prototype.push.apply(res, values);

  // Put the result to the active spreadsheet.
  var ss = SpreadsheetApp.getActiveSheet();
  ss.getRange(1, 1, res.length, res[0].length).setValues(res);
}

注意:

  • 在运行此修改后的脚本之前,请先安装Parser的GAS库。
  • 此修改后的脚本与各种URL不对应。可以将其用于您问题中的网址。如果要从其他URL检索值,请修改脚本。

参考:

如果这不是您想要的,对不起。