解析HTML以使用Google Apps脚本检索特定的标签值

时间:2018-08-20 03:50:26

标签: parsing google-apps-script

我正在尝试解析HTML以检索我的Google Apps脚本代码上的标记的值。包含属性中的换行符,并且出现多次,但是我只想要第一个值。 (在这种情况下,只需要'foo'。)

<b class="
"
>
foo
</b><b class="
"
>
var
</b>

在Google Apps脚本上,“ getElementByTagName”之类的功能不可用。因此,尽管我首先使用了regexp,但这不是明智的选择。 有人对我如何前进有想法吗?任何评论/猜测将不胜感激!

1 个答案:

答案 0 :(得分:4)

将XmlService用于您的情况如何解决?在XmlService,即使标记中有多个换行符,也可以检索该值。我认为针对您的情况有几种解决方法。因此,请将此视为其中之一。

示例脚本的流程如下。

流量:

  1. 将xml的标头和根元素标签添加到html。
  2. 使用XmlService解析创建的xml值。
  3. 使用XmlService检索标签的第一个值。

示例脚本:

var html = '<b class="\n"\n>\nfoo\n</b><b class="\n"\n>\nvar\n</b>\n'; // Your sample value

var xml = '<?xml version="1.0"?><sampleContents>' + html + '</sampleContents>';
var res = XmlService.parse(xml).getRootElement().getChildren()[0].getText().trim();
Logger.log(res) // foo

注意:

  • 在此示例脚本中,使用了示例html。因此,如果您使用更复杂的工具,可以提供吗?我想修改脚本。

参考:

如果这不是您想要的,请告诉我。我想修改它。

编辑1:

不幸的是,对于从URL检索的值,不能使用上述脚本。因此,我使用了“解析器”,它是针对您情况的GAS库。示例脚本如下。

示例脚本:

var url = "https://www.booking.com/searchresults.ja.html?ss=kyoto&checkin_year=2018&checkin_month=10&checkin_monthday=1&checkout_year=2018&checkout_month=10&checkout_monthday=2&no_rooms=1&group_adults=1&group_children=0";
var html = UrlFetchApp.fetch(url).getContentText();
var res = Parser.data(html).from("<b class=\"\n\"\n>").to("</b>").build().trim();
Logger.log(res) // US$11

注意:

  • 在运行此脚本之前,请安装“解析器”。关于库的安装,您可以在here上看到它。
    • 该库的项目密钥为M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV

参考文献:

编辑2:

对于您注释中的第二个URL,该URL似乎与第一个URL不同。而且您的新URL也没有标签<b class=\"\n\"\n>。这样,就无法检索您想要的值。但是从您评论中的第一个URL,我推测出您想要的值。请确认以下脚本?

var url = "https://www.booking.com/searchresults.ja.html?ss=kyotogranvia&checkin_year=2018&checkin_month=10&checkin_monthday=1&checkout_year=2018&checkout_month=10&checkout_monthday=2&no_rooms=1&group_adults=1&group_children=0";
var html = UrlFetchApp.fetch(url).getContentText();
var res = Parser.data(html).from("<span class=\"lp-postcard-avg-price-value\">").to("</span>").build().trim();
Logger.log(res) // US$289