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

萨米·乔沙内

早些时候我问了一个关于在 Google 表格中使用 =IMPORTXML 函数获取数据的问题。现在我已经开始工作了,但我明白脚本可以更好地提高可靠性和可用性。

当前脚本的问题(见下文)是它只从一个 url 获取数据。我想从多个 url 导入数据(每个国家/地区都有自己唯一的 url)。我想为每个 URL 获取多个数据。这一切都涉及荷兰政府对其他国家的旅行建议。在我的电子表格中,我在 A 中添加了一个具有唯一 URL 的列,在 B 中添加了简单的 tekst 国家,在 C、D 和 E 列中添加了要获取的数据。

我想获取的数据

  • 颜色状态(黄色、橙色、红色) [can be found within <h3></h3>]
  • mapurl(带有地图的 .png 文件的 url,包括旅行建议) [can be found within <paragraph></paragraph>]
  • 摘要(本旅行建议摘要) [can be found within <summary></summary>]

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

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。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Google Apps 脚本 - 使用此脚本/公式获取 Google 表格中某些选定表格的价值

尝试使用Google脚本从Google表格中获取数据并在具有水平标签的网页上显示

使用 Google 应用程序脚本从网站上抓取数据并粘贴到 Google 工作表

复制输入数据并将其粘贴到电子表格中时,使用什么触发器来更新单元格?(Google表格/应用脚本)

Google 表格应用脚本 - 获取水平数据并垂直设置

使用 Google 表格中的数据在 Google Apps 脚本中自动完成

如何使用Google脚本中的URL参数过滤Google表格列中的数据?

使用Google表格中的脚本设置setFormula

使用json从Google表格获取数据

使用应用脚本将嵌套的Json数据解析为Google表格

如何使用应用脚本更新现有图形的数据范围?[Google表格]

使用Google脚本对Google表格中的数据进行排序(具有自定义排序顺序)

如何使用Google脚本将数据添加到Google表格中的特定行

Google表格-使用Google脚本将整个列中的数据从KB转换为GB

Google表格-Google应用脚本-获取完整的表格数据和样式的方法

使用Google表格中的输入来换行(Google Apps脚本)

如何使用Google Apps脚本清除Google表格中的列?

使用 Google 脚本更新 Google 表格中的行

在Google表格和Google脚本中循环使用“搜索”

如何使用Google表格中的脚本/宏获取所选文本?

使用Google Apps脚本获取网站的每个页面

使用Apps脚本用Google表格中的新数据替换重复的行

使用Apps脚本从CSV列表中创建单元内下拉菜单(Google表格数据验证)

使用Apps脚本删除Google表格中的空白行后,是否要复制数据?

使用脚本共享Google表格

Google脚本-从网站获取特定数据

有什么方法可以使用 Google CalendarApp 脚本从 Google 日历中获取约会空档数据?

如何使用BeautifulSoup从网站获取var脚本中的json数据?

替换Google表格中的函数中的文本(使用脚本)