jsoup HTMLパーサのhello worldの例

jsoup HTMLパーサーHello Worldの例

html parser

Jsoup、HTMLパーサー、その「jqueryのような」および「正規表現」セレクター構文は非常に使いやすく、必要なものを取得するのに十分な柔軟性があります。 以下は、Jsoupを使用して、HTMLページからリンク、画像、ページタイトル、および「div」要素のコンテンツを取得する方法を示す3つの例です。

Download jsoup
jsoupは、Maven中央リポジトリーで入手できます。 Maven以外のユーザーの場合は、jsoup websiteからダウンロードするだけです。

pom.xml

        
            org.jsoup
            jsoup
            1.10.2
        

この例では、jsoupを使用してページのタイトルを取得し、「google.com」からすべてのリンクを取得する方法を示します。

HTMLParserExample1.java

package com.example;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

public class HTMLParserExample1 {

    public static void main(String[] args) {

        Document doc;
        try {

            // need http protocol
            doc = Jsoup.connect("http://google.com").get();

            // get page title
            String title = doc.title();
            System.out.println("title : " + title);

            // get all links
            Elements links = doc.select("a[href]");
            for (Element link : links) {

                // get the value from href attribute
                System.out.println("\nlink : " + link.attr("href"));
                System.out.println("text : " + link.text());

            }

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

    }

}

出力

title : Google

link : http://www.google.com.my/imghp?hl=en&tab=wi
text : Images

link : http://maps.google.com.my/maps?hl=en&tab=wl
text : Maps

//omitted for readability

Note
HTTP 403エラーメッセージを回避するために、Jsoupで「userAgent」を指定することをお勧めします。

    Document doc = Jsoup.connect("http://anyurl.com")
    .userAgent("Mozilla")
    .get();

2. すべての画像を取得

2番目の例は、Jsoup正規表現セレクターを使用して、「yahoo.com」からすべての画像ファイル(png、jpg、gif)を取得する方法を示しています。

HTMLParserExample2.java

package com.example;

package com.example;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

public class HTMLParserExample2 {

    public static void main(String[] args) {

        Document doc;
        try {

            //get all images
            doc = Jsoup.connect("http://yahoo.com").get();
            Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
            for (Element image : images) {

                System.out.println("\nsrc : " + image.attr("src"));
                System.out.println("height : " + image.attr("height"));
                System.out.println("width : " + image.attr("width"));
                System.out.println("alt : " + image.attr("alt"));

            }

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

    }

}

出力

src : http://l.yimg.com/a/i/mntl/ww/events/p.gif
height : 50
width : 202
alt : Yahoo!

src : http://l.yimg.com/a/i/ww/met/intl_flag_icons/20111011/my_flag.gif
height :
width :
alt :

//omitted for readability

3. メタ要素を取得する

最後の例では、オフラインHTMLページをシミュレートし、jsoupを使用してコンテンツを解析します。 「meta」キ​​ーワードと説明、および「color」のIDを持つdiv要素も取得します。

HTMLParserExample3.java

package com.example;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class HTMLParserExample3 {

    public static void main(String[] args) {

        StringBuffer html = new StringBuffer();

        html.append("");
        html.append("");
        html.append("");
        html.append("");
        html.append("Hollywood Life");
        html.append("");
        html.append("");
        html.append("");
        html.append("");
        html.append("
This is red
/>"); html.append(""); html.append(""); Document doc = Jsoup.parse(html.toString()); //get meta description content String description = doc.select("meta[name=description]").get(0).attr("content"); System.out.println("Meta description : " + description); //get meta keyword content String keywords = doc.select("meta[name=keywords]").first().attr("content"); System.out.println("Meta keyword : " + keywords); String color1 = doc.getElementById("color").text(); String color2 = doc.select("div#color").get(0).text(); System.out.println(color1); System.out.println(color2); } }

出力

Meta description : The latest entertainment news
Meta keyword : hollywood gossip, hollywood news
This is red
This is red

4. フォーム入力をつかむ

このコードスニペットは、Jsoupを使用してHTMLフォームの入力(名前と値)を取得する方法を示しています。 使用法の詳細については、このautomate login a website with Javaを参照してください。

public void getFormParams(String html){

    Document doc = Jsoup.parse(html);

    //HTML form id
    Element loginform = doc.getElementById("your_form_id");

    Elements inputElements = loginform.getElementsByTag("input");

    List paramList = new ArrayList();
    for (Element inputElement : inputElements) {
        String key = inputElement.attr("name");
        String value = inputElement.attr("value");
    }

}

5. ファビコンを取得

このコードは、Jsoupを使用してお気に入りのアイコンをページングする方法を示しています。

jSoupExample.java

package com.example;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class jSoupExample {

    public static void main(String[] args) {

    StringBuffer html = new StringBuffer();

    html.append("");
    html.append("");
    html.append("");
    //html.append("");
    html.append("");
    html.append("");
    html.append("something");
    html.append("");
    html.append("");

    Document doc = Jsoup.parse(html.toString());

    String fav = "";

    Element element = doc.head().select("link[href~=.*\\.(ico|png)]").first();
    if(element==null){

        element = doc.head().select("meta[itemprop=image]").first();
        if(element!=null){
            fav = element.attr("content");
        }
    }else{
        fav = element.attr("href");
    }
    System.out.println(fav);
  }

}

出力

http://example.com/image.ico