使用Google表格中的应用脚本获取网站数据

问题描述

我之前曾问过一个有关使用Google Sheets中的= IMPORTXML函数获取数据的问题。现在我已经可以正常工作了,但是我知道脚本可以更好地实现可靠性和可用性。

当前脚本的问题(请参阅下文)是它仅从一个URL中获取数据。我想从多个网址(每个国家/地区都有自己的唯一网址)导入数据。我想获取每个URL的多个数据。这一切都涉及从荷兰政府到其他国家的旅行建议。在我的spreadsheet中,添加一个列,其中包含A的唯一URL,B的普通tekst国家和要获取的数据在C,D和E列。

我想获取的数据

  • 颜色状态(Geel,Oranje,Rood)[can be found within <h3></h3>]
  • mapurl(包含旅行建议的带有地图的.png文件的URL)[can be found within <paragraph></paragraph>]
  • 摘要(当前旅行建议摘要[can be found within <summary></summary>]

我希望您能帮助我改进脚本,以便更轻松地从政府那里获取“旅行建议”数据。

function parseXml() {
  
  var url = 'https://opendata.nederlandwereldwijd.nl/v1/sources/nederlandwereldwijd/infotypes/traveladvice/a790e247-8ff8-4aa8-be93-9202ccaa180a';
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  str = xml.split("<paragraphtitle>Veiligheidsrisico’s</paragraphtitle>")[1]
  mySubString = str.match(new RegExp("<summary>" + "(.*)" + "</summary>"))[1];
  
  return mySubString;
}

(脚本来自:Marios,谢谢Marios!)然后在电子表格的一个单元格内依次=parseXml()获取数据。

解决方法

解决方案:

您可以使用以下三个自定义功能:

function parseXmlSummary(url) {
  
  try{
  var xml = UrlFetchApp.fetch(url).getContentText();
  mySubString = xml.match(new RegExp("<summary>" + "(.*)" + "</summary>"))[1];
  return mySubString;
  }
  catch(e){return "";}
}

function parseXmlMapURL(url) {
   
  try{
  var xml = UrlFetchApp.fetch(url).getContentText();
  mySubString = "https://"+xml.match(new RegExp("CDATA\\[https://" + "(.*)" + ".png"))[1]+".png";
  return mySubString;
  }
  catch(e){return "";}
}


function parseXmlColours(url) {
  
  try{
  var xml = UrlFetchApp.fetch(url).getContentText();
  str = xml.split("<paragraphtitle>Veiligheidsrisico’s</paragraphtitle>")[1]
  var colours = ['Geel','Oranje','Rood'];
  res_colour = colours.filter(c => str.includes(c))[0];
  return res_colour;
  } 
  catch(e){return "";}

}

然后您可以像这样的公式分别调用它们:

  • =parseXmlSummary(A7)
  • =parseXmlMapURL(A7)
  • =parseXmlColours(A7)

假设单元格 A7 包含给定的URL。

对于下面的所有其他单元格( A8 A9 ,..),您只需像通常使用其他公式一样向下拖动公式即可。