HTML は WEB の中核であり、JavaScript、JSP、PHP、ASP、またはその他の Web テクノロジを使用して動的に生成されたものであっても、目にするすべてのインターネット ページは HTML に基づいています。実際、ブラウザは HTML を解析し、都合の良い方法で表示します。しかし、HTML ドキュメントを解析してその中の要素、タグ、属性を見つけたり、Java プログラムを使用して特定の要素が存在するかどうかを確認したりする必要がある場合はどうすればよいでしょうか。もしあなたが数年間 Java プログラマーだったら、DOM や SAX などのパーサーを使用して XML 解析を行ったことがあると思います。しかし、皮肉なことに、サーブレットやその他の Java Web テクノロジが含まれていない基本的な Java アプリケーションから HTML ドキュメントを解析する必要がある場合があります。さらに、Core JDK には HTTP ライブラリや HTML ライブラリも含まれていません。そのため、HTML ファイルの解析に関しては、多くの Java プログラマーが Java で HTML タグの値を取得する方法を Google に尋ねます。これに出会ったとき、そのソリューションは必要な機能を実装したオープンソース ライブラリであると確信していましたが、それが Jsoup ほど素晴らしく機能が豊富であるとは知りませんでした。JQuery スタイルの HTML ファイル、属性、CSS クラスの読み取りと解析のサポートを提供するだけでなく、同時にそれらを変更することもできます。Jsoup を使用すると、HTML ドキュメントで何でもできるようになります。この記事では、HTML ファイルを解析し、タグの名前と属性を見つけます。また、ファイルや Google ホームページなどの URL から HTML をダウンロードして解析する例も見ていきます。
Jスープとは何ですか
Jsoup は、実際の HTML を操作するためのオープンソース Java ライブラリです。これは、最高の DOM、CSS、および jQuery のような技術を使用してデータを取得および操作するための非常に便利な API を提供します。Jsoup は WHATWG HTML5 仕様を実装し、Chrome や Firefox などの最新のブラウザと同じ DOM に HTML を解析します。Jsoup ライブラリの便利な機能の一部を次に示します。- Jsoup は、URL、ファイル、または文字列から HTML をスクレイピングして解析できます。
- Jsoup は、DOM トラバーサルまたは CSS セレクターを使用してデータを検索および抽出できます。
- Jsoup を使用すると、HTML 要素、属性、テキストを操作できます。
- Jsoup は、XSS 攻撃を防ぐために、ユーザーが提供した情報のホワイトリスト クリーニングを提供します。
- Jsoup は「きちんとした」HTML も生成します。
Jsoupを使用したJavaでのHTMLの解析
このチュートリアルでは、Jsoup を使用して Java で HTML ドキュメントを解析および走査する 3 つの異なる例を見ていきます。最初の例では、Java 文字列リテラルの形式でタグを含む HTML 文字列を解析します。2 番目の例では、インターネットから HTML ドキュメントをダウンロードし、3 番目の例では、解析用に独自のサンプル HTML ファイル login.html をダウンロードします。このファイルは、HTML フォームを含む「body」セクションの「title」タグと「div」タグで構成されるサンプル HTML ドキュメントです。フォームには、ユーザー名とパスワードを入力するためのフィールドと、さらにアクションを実行するためのリセット ボタンと確認ボタンが含まれています。これは「有効性」チェックに合格できる「正しい」HTML であり、すべてのタグと属性が適切に閉じられていることを意味します。HTML ファイルは次のようになります。<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
</head>
<body>
<div id="login" class="simple" >
<form action="login.do">
Username : <input id="username" type="text" /><br>
Password : <input id="password" type="password" /><br>
<input id="submit" type="submit" />
<input id="reset" type="reset" />
</form>
</div>
</body>
</html>
Jsoup を使用すると、HTML を解析するのが非常に簡単です。静的メソッドを呼び出してJsoup.parse()
HTML 文字列を渡すだけです。parse()
Jsoup は、文字列、ファイル、ベース URI、URL、および .html から HTML を読み取るためのいくつかのオーバーロードされたメソッドを提供しますInputStream
。HTML ファイルが UTF-8 形式でない場合に、HTML ファイルを正しく読み取るためのエンコーディングを指定することもできます。このメソッドは、parse(String html)
受信した HTML を解析して新しいオブジェクトを作成しますDocument
。Jsoup では、クラスはDocument
クラスを継承しElement
、クラスを拡張しますNode
。クラスもクラスからNode
継承しますTextNode
。Null 以外の文字列をメソッドに渡す限り、Document
(少なくとも)「head」要素と「body」要素を含むオブジェクトの意味のある解析が成功することが保証されます。オブジェクトがある場合はDocument
、クラスとその親の適切なメソッドを呼び出すことで、必要なデータを取得できDocument
ます。 Element
Node
HTMLドキュメントを解析するためのJavaプログラム
これは、HTML 文字列、インターネットからダウンロードした HTML ファイル、およびローカル HTML ファイルを解析するための完全なプログラムです。これを実行するには、IDE (Eclipse またはその他) またはコマンド ラインを使用できます。Eclipse では、これは非常に簡単です。このコードをコピーし、新しい Java プロジェクトを作成し、「src」フォルダーを右クリックして、コピーしたコードを貼り付けるだけです。Eclipse が適切なパッケージとソース コード ファイルを適切な名前で作成してくれるため、作業が大幅に軽減されます。すでに Java プロジェクトがある場合、これは 1 つのステップにすぎません。以下のプログラムは、HTML ファイルの解析と走査の 3 つの例を示しています。最初の例では HTML を含む文字列を直接解析し、2 番目の例では URL からダウンロードした HTML ファイルを解析し、3 番目の例ではローカル ファイル システムから HTML ドキュメントをダウンロードして解析します。import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{
public static void main(String args[]) {
// Parse HTML String using JSoup library
String HTMLSTring = "<!DOCTYPE html>"
+ "<html>"
+ "<head>"
+ "<title>JSoup Example</title>"
+ "</head>"
+ "<body>"
+ "<table><tr><td><h1>HelloWorld</h1></tr>"
+ "</table>"
+ "</body>"
+ "</html>";
Document html = Jsoup.parse(HTMLSTring);
String title = html.title();
String h1 = html.body().getElementsByTag("h1").text();
System.out.println("Input HTML String to JSoup :" + HTMLSTring);
System.out.println("After parsing, Title : " + title);
System.out.println("Afte parsing, Heading : " + h1);
// JSoup Example 2 - Reading HTML page from URL
Document doc;
try {
doc = Jsoup.connect("http://google.com/").get();
title = doc.title();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Jsoup Can read HTML page from URL, title : " + title);
// JSoup Example 3 - Parsing an HTML file in Java
//Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
Document htmlFile = null;
try {
htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // right
title = htmlFile.title();
Element div = htmlFile.getElementById("login");
String cssClass = div.className(); // getting class form HTML element
System.out.println("Jsoup can also parse HTML file directly");
System.out.println("title : " + title);
System.out.println("class of div tag : " + cssClass);
}
}
出力:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Jsoup HTML パーサーは、整形式かどうかに関係なく、提供された HTML の「クリーンな」解析を生成するためにあらゆる努力を払います。次のエラーを処理できます。
- 閉じていないタグ。例えば、
<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
- 暗黙のタグ。たとえば、開いているものは次
<td>Java is Great</td>
のようにラップされます。<table><tr><td>
- Jsoup は堅牢な文書構造を作成します (HTML には head と body が含まれますが、body には関連する要素のみが含まれます)。
GO TO FULL VERSION