HTML は WEB の中核です。JavaScript、JSP、PHP、ASP、またはその他の WEB テクノロジーによって動的に生成されたものであっても、インターネット上で表示されるすべてのページは HTML です。ブラウザは HTML を解析してレンダリングします。しかし、Java プログラムで HTML ドキュメントを自分で解析し、特定の要素、タグ、属性を見つけたり、特定の要素が存在するかどうかを確認したりする必要がある場合はどうすればよいでしょうか?長年 Java でプログラミングをしている人であれば、XML の解析を試みたり、DOM や SAX などのパーサーを使用したりしたことはあると思いますが、HTML の解析作業は行ったことがない可能性が非常に高いです。さらに皮肉なことに、Java アプリケーションでは HTML ドキュメントを解析する必要があることはほとんどなく、これにはサーブレットやその他の Java WEB テクノロジは含まれていません。さらに悪いことに、JDK コアには HTTP ライブラリや HTML ライブラリが含まれていないのです (少なくとも私は知りません)。このため、HTML ファイルを解析する場合、多くの Java プログラマーはまず Google で Java で HTML タグを抽出する方法を確認する必要があります。このニーズがあったとき、これを実現できるオープン ソース ライブラリがいくつかあるだろうと信じていましたが、JSoup のようなクールで完全に機能するライブラリがあるとは予想していませんでした。 HTML ドキュメントの読み取りと解析をサポートするだけでなく、HTML ファイルから要素やその属性、CSS プロパティを抽出したり、それらを変更したりすることもできます。 JSoup を使用すると、HTML ドキュメントでほとんど何でもできます。 Google ホームページまたは Java の任意の URL から HTML ファイルをダウンロードして解析する方法の例を見ていきます。
JSoupライブラリとは何ですか
Jsoup は、実際のアプリケーションで HTML を処理するために使用できるオープン ソース Java ライブラリです。 DOM、CSS、および jquery スタイルのメソッドの利点を最大限に活用して、データの抽出と変更に非常に便利な API を提供します。 Jsoup は WAHTWG HTML5 仕様を実装しており、Jsoup が HTML から解析する DOM は、Chrome や Firefox などの最新のブラウザで解析される DOM とまったく同じです。 Jsoup ライブラリの便利な機能をいくつか紹介します。
1.Jsoup は、URL、ファイル、または文字列から HTML を取得して解析できます。
2.Jsoup は、DOM トラバーサルまたは CSS セレクターを使用して、データを検索および抽出できます。
3. Jsoup を使用して、HTML 要素、属性、テキストを変更できます。
4.Jsoup は、XSS 攻撃を防ぐため、安全なホワイトリストを通じてユーザーが送信したコンテンツがクリーンであることを保証します。
5.Jsoup もきれいな HTML を出力できます。
Jsoup は、正しく有効な HTML だけでなく、不完全で無効なタグ コレクションも含め、現実に現れるあらゆる種類のさまざまな HTML を処理できるように設計されています。 Jsoup の主要な競争力の 1 つは、その堅牢性です。
Java での HTML 解析に Jsoup を使用する
この Java HTML 解析チュートリアルでは、Jsoup を使用して Java で HTML を解析および走査する 3 つの異なる例を見ていきます。最初の例では、HTML 文字列を解析します。その内容は、Java の文字列リテラルで構成されるタグです。 2 番目の例では、WEB から HTML ドキュメントをダウンロードし、3 番目の例では、解析のために HTML サンプル ファイル login.html をロードします。このファイルは、フォームを含む本文内に title タグと div タグが含まれる HTML ドキュメントの例です。ユーザー名とパスワードを取得するための入力タグと、次のステップに進むための送信ボタンとリセット ボタンがあります。これは正しく有効な HTML です。つまり、すべてのタグと属性が正しく閉じられています。サンプル HTML ファイルは次のとおりです。
次のようにコードをコピーします。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<頭>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>ログインページ</title>
</head>
<本文>
<div id="ログイン" >
<form action="login.do">
ユーザー名: <input id="ユーザー名" type="text" /><br>
パスワード: <input id="パスワード" type="パスワード" /><br>
<input id="送信" type="送信" />
<input id="リセット" type="リセット" />
</form>
</div>
</body>
</html>
Jsoup を使用して HTML を解析するのは非常に簡単で、その静的メソッド Jsoup.parse() を呼び出して HTML 文字列を渡すだけです。 Jsoup は、文字列、ファイル、URI、URL、さらには InputStream から HTML ファイルを読み取ることができる複数のオーバーロードされた parse() メソッドを提供します。 UTF-8エンコーディングでない場合は、HTMLファイルを正しく読み込めるように文字エンコーディングを指定することもできます。以下は、Jsoup ライブラリの HTML 解析メソッドの完全なリストです。 parse(String html) メソッドは、入力 HTML を解析して新しいドキュメントを作成します。 Jsoup では、Document は Element を継承し、さらに Element は Node を継承します。同じ TextNode も Node から継承します。 Null 以外の文字列を渡す限り、意味のある解析が確実に成功し、head 要素と body 要素を含む Document が取得されます。この Document を取得したら、Document とその親クラスである Element および Node の適切なメソッドを呼び出して、必要なデータを取得できます。
HTMLドキュメントを解析するJavaプログラム
以下は、HTML 文字列、インターネットからダウンロードされた HTML ファイル、およびローカル ファイル システム内の HTML ファイルを解析する完全な Java プログラムです。このプログラムを実行するには、Eclipse IDE や他の IDE、あるいはコマンドを使用することもできます。 Eclipse では、このコードをコピーして新しい Java プロジェクトを作成し、src パッケージを右クリックして貼り付けるだけです。 Eclipse は正しいパッケージと Java ソース ファイルを同じ名前で作成するため、作業負荷は最小限で済みます。すでに Java サンプル プロジェクトがある場合、必要な手順は 1 つだけです。次の Java プログラムは、HTML ファイルの解析と走査の 3 つの異なる例を示しています。最初の例では、HTML コンテンツを含む文字列を直接解析し、2 番目の例では URL からダウンロードした HTML ファイルを解析し、3 番目の例では、ローカル ファイル システムから HTML ドキュメントをロードして解析します。 parse メソッドは、最初と 3 番目の例の両方で Document オブジェクトを取得するために使用されており、クエリを実行してタグ値または属性値を抽出できます。 2 番目の例では、URL 接続を作成し、HTML をダウンロードして解析する Jsoup.connect メソッドを使用します。このメソッドは、後続のクエリやタグまたは属性の値の取得に使用できる Document も返します。
次のようにコードをコピーします。
インポート java.io.IOException;
org.jsoup.Jsoup をインポートします。
org.jsoup.nodes.Document をインポートします。
org.jsoup.nodes.Element をインポートします。
/**
[*] Jsoup ライブラリを使用してファイルから HTML ドキュメントを解析/読み取る Java プログラム。
[*] Jsoup は、Java 開発者が HTML を解析できるようにするオープン ソース ライブラリです。
[*] ファイルと要素の抽出、データの操作、DOM、CSS および CSS を使用したスタイルの変更
[*] JQuery のようなメソッド。
[*]
[*] @著者ジャビン・ポール
[*]/
パブリック クラス HTMLParser{
public static void main(String args[]) {
// JSoup ライブラリを使用して HTML 文字列を解析します
文字列 HTMLSTring = "<!DOCTYPE html>"
+ "<html>"
+ "<頭>"
+ "<title>JSoup の例</title>"
+ "</head>"
+ "<本体>"
+ "|[b]HelloWorld[/b]"
+「」
+ "</body>"
+ "</html>";
ドキュメント html = Jsoup.parse(HTMLSTring);
文字列タイトル = html.title();
文字列 h1 = html.body().getElementsByTag("h1").text();
System.out.println("HTML 文字列を JSoup に入力:" + HTMLSTring);
System.out.println("解析後、タイトル : " + タイトル);
System.out.println("解析後、見出し: " + h1);
// JSoup 例 2 - URL から HTML ページを読み取る
文書ドキュメント。
試す {
doc = Jsoup.connect("http://google.com/").get();
タイトル = doc.title();
} キャッチ (IOException e) {
e.printStackTrace();
}
System.out.println("Jsoup URL から HTML ページを読み取ることができます。タイトル : " + タイトル);
// JSoup 例 3 - Java での HTML ファイルの解析
//Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // 間違っています
ドキュメント htmlFile = null;
試す {
htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
} キャッチ (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} // 右
タイトル = htmlFile.title();
要素 div = htmlFile.getElementById("ログイン");
String cssClass = div.className(); // HTML要素からクラスを取得します。
System.out.println("Jsoup は HTML ファイルを直接解析することもできます");
System.out.println("タイトル : " + タイトル);
System.out.println("div タグのクラス : " + cssClass);
}
}
出力:
次のようにコードをコピーします。
JSoup への HTML 文字列の入力:<!DOCTYPE html><html><head><title>JSoup の例</title></head><body><table><tr><td><h1>HelloWorld</h1> </tr></table></body></html>
解析後、タイトル: JSoup Example
解析後、見出し: HelloWorld
Jsoup URLからHTMLページを読み取ることができます、タイトル:Google
Jsoup は HTML ファイルを直接解析することもできます。 title : ログインページ
divタグのクラス: シンプル
Jsoup の利点は、非常に堅牢であることです。 Jsoup HTML パーサーは、HTML が整形式であるかどうかに関係なく、提供された HTML を可能な限りきれいに解析します。閉じられていないタグ (例: Java <p>Scala から <p>JavaScala)、暗黙的なタグ (例: 裸の |Java is Great を | でラップ) などのエラーを処理でき、常に文書構造 (HTML) を出力できます。頭と体を含み、正しい要素のみが頭内に含まれます)。これは、Java で HTML が解析される方法です。 Jsoup は、Web から直接 HTML ドキュメント、本文フラグメント、HTML 文字列を読み取り、HTML コンテンツを解析することを非常に簡単にする、優れた堅牢なオープン ソース ライブラリです。この記事では、Java で特定の HTML タグを取得する方法を学びました。最初の例では、タイトルと H1 タグの値をテキストに抽出しました。3 番目の例では、CSS プロパティの抽出を通じて取得する方法を学びました。 HTMLタグからプロパティ値を取得します。強力な jQuery スタイルの html.body().getElementsByTag("h1").text() メソッドに加えて、任意の HTML タグを抽出することもでき、Document.title() や Element.className( ) タイトルとCSSクラスをすぐに取得できる便利なメソッドです。 JSoup を楽しんでいただければ幸いです。この API の例をさらにいくつか紹介する予定です。