HOWTO · Java

Java で HTML を解析する

このチュートリアルでは、Java で HTML を効率的に解析する方法について説明します。

このページの内容

HTML ファイルを扱うプログラムを作成している場合、HTML ファイルを効率的に解析する方法を見つける必要があるかもしれません。 最も使用されている Web スクレイピング ツールである Jsoup を使用して、Java プログラミング言語を介して HTML ファイルをすばやく解析できます。

この記事では、HTML ファイルを解析する方法について説明します。 また、トピックを簡単にするために必要な例と説明を提供して、トピックについて説明します。

JavaでのJsoupの働き

Jsoup は、Web ページの HTML ファイルを解析し、それを Document オブジェクトに変換することによって機能します。 これは、DOM のプログラムによる表現と言えます。

Jsoup の parse という名前のメソッドが Document を作成します。 以下では、Jsoup の機能の一部について説明します。

  1. parse(File MyFile, @Nullable String charsetName) - HTML ファイルの解析に使用されます。
  2. parse(InputStream in, @Nullable String CharsetName, String BaseUri) - InputStream を読み取り、解析します。
  3. parse(String html) - HTML 文字列を解析するために使用されます。

Jsoup を使用して Java で HTML を解析する

以下の例では、Jsoup を使用して Web サイトを解析します。 この例の Java コードは次のようになります。

// importing necessary packages
package javaparsehtml;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JavaParseHtml {
  public static void main(String[] args) {
    URL MyUrl;
    try {
      // Providing the URL of the website
      MyUrl = new URL("https://www.example.com");
      HttpURLConnection MyConnection;
      try {
        // Create an Http connection
        MyConnection = (HttpURLConnection) MyUrl.openConnection();
        // Defining the request format
        MyConnection.setRequestProperty("accept", "application/json");

        try {
          // Create a response stream
          InputStream ResponseStream = MyConnection.getInputStream();

          // Parsing the website
          Document MyDoc = Jsoup.parse(ResponseStream, "UTF-8", "https://www.example.com");
          // Showing the output as HTML
          System.out.println(MyDoc.html());
        } catch (IOException e) {
          e.printStackTrace();
        }
      } catch (IOException e) {
        e.printStackTrace();
      }

    } catch (MalformedURLException e) {
      e.printStackTrace();
    }
  }
}

上記の例では、HTML ファイルを解析する方法を示しており、各行の目的は既に指示されています。

この例では、提供された URL に基づいて HTTP 接続を作成し、要求されたプロパティを定義しました。 その後、InputStream を作成し、Web サイトを解析しました。

最後に、Web サイトを出力として印刷します。 上記の Java プログラムを実行すると、次のような出力が得られます。

<!doctype html>
<html>
 <head>
  <title>Example Domain</title>
  <meta charset="utf-8">
  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
        
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
 </head>
 <body>
  <div>
   <h1>Example Domain</h1>
   <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p>
   <p><a href="https://www.iana.org/domains/example">More information...</a></p>
  </div>
 </body>
</html>

ここで重要な注意点として、Jsoup の jar ファイルをインストールまたはインクルードしていない場合は、最初にプロジェクト ディレクトリに jar ファイルをインクルードするか、パッケージをインストールする必要があります。 そうしないと、エラーが発生する可能性があります。