30
var page = UrlFetchApp.fetch(contestURL);
var doc = XmlService.parse(page);

上記のコードを使用すると解析エラーが発生しますが、XmlService クラスを非推奨の Xml クラスに置き換え、寛大なフラグを設定すると、html が適切に解析されます。

var page = UrlFetchApp.fetch(contestURL);
var doc = Xml.parse(page, true);

この問題は主に、html の JavaScript 部分に CDATA がないために発生し、パーサーは次のエラーを表示します。

The entity name must immediately follow the '&' in the entity reference.

<script>(.*?)</script>using regexをすべて削除しても、<br>タグが閉じられていないため、まだ問題が発生します。HTMLをDOMツリーに解析するきれいな方法はありますか?

4

11 に答える 11

4

Web ページから 1 つの値を取得するなどの単純なタスクの場合、正規表現を使用できます。Regex は HTML の解析に悪いことで知られていますが、さまざまな奇妙なケースが発生する可能性がありますが、アクセスしている HTML に自信がある場合は、これが最も簡単な方法になることがあります。

<title>ページのタグのコンテンツを取得する例を次に示します。

var page = UrlFetchApp.fetch(contestURL);
var regExp = new RegExp("<title>(.*)</title>", "gi");
var result = regExp.exec(page.getContentText());
// [1] is the match group when using parenthesis in the pattern
var value = result ? result[1] : 'No title found';
于 2015-07-24T09:36:55.377 に答える
4

Xml.parse()HTML を解析するときに役立つ、寛大な解析を有効にするオプションがあります。ただし、このXmlサービスは非推奨であり、新しいサービスにはXmlServiceこの機能がないことに注意してください。

于 2013-10-22T20:46:38.287 に答える
1

2つのオプションがあります

a) 1 つは、JavaScript の文字列関数を使用することです。最初に を使用してタグを見つけ、string.indexOf()次に を使用して必要なデータを抽出しますstring.substring()

b) もう 1 つのオプションは、Xml サービスを利用することです。

于 2012-07-05T16:59:56.100 に答える
-1

Apps Script で HTML DOM サーバーサイドを作成することはできません。少なくとも単純な構文解析では、正規表現を使用するのがおそらく最良の選択肢です。

于 2012-07-19T00:36:18.760 に答える