1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

導入

たきの「博士〜」

たきの「パケモソカードの金ラザードンを買いたいのですが、どこで買えば良いかわからないんですよ」

博士「ふむ。」

博士「ヘードオフはどうじゃ?」

たきの「高い印象がありまして…」

博士「ふむふむ。」

博士「そんな時は価格を比較するサイトを作ってみるんじゃ。」

たきの「そんなことできるんですか?」

博士「もちろんじゃ。」

博士「例えば、カードショップA、B、Cの価格を取得して比較すれば、一番安いお店がすぐ分かるじゃろ?」

たきの「おぉ!便利そうです!」

博士「じゃが、そのサイトを作るには、画面の作成やデータベースなど、覚えることがたくさんある。」

たきの「うぅ…一気には覚えられません…。」

博士「安心するのじゃ。」

博士「今日はその中でも、一番最初の**『Webサイトから情報を取得する方法』**だけを学ぶ。」

たきの「つまり、価格を集めるところですね!」

博士「その通りじゃ。」

博士「価格比較サイト作りの第一歩として、今日はJsoupについて学ぶぞ!」

Jsoupって何ですか?

**Jsoup(ジェイソープ)**とは、

HTMLを解析して、欲しい情報を取得し、Javaのオブジェクトとして扱えるライブラリじゃ。

名前の由来は、

  • JavaJ
  • BeautifulSoup(PythonのHTML解析ライブラリ)の Soup

を組み合わせたものじゃ。

どうやって使うんですか?

まずはWebページを読み込む。

Document doc = Jsoup.connect("https://example.com").get();

これでHTML全体を取得できるんじゃ。


次に、欲しいタグを取得する。

例えばHTMLが

<p>カレー</p>
<p>ラーメン</p>
<p>ハンバーガー</p>

だった場合、

Elements elements = doc.select("p");

と書くと、<p>タグをすべて取得できる。


他にも、

classで取得

doc.select(".class名");

.」はclassという意味じゃ。


idで取得

doc.select("#id名");

#」はidという意味じゃ。


たきの「博士!いい感じです…!」

博士「まだじゃ!」

博士「select("p")で取得できるのはHTML要素そのものなのじゃ。」

博士「そのままではタグの情報も持っているため、画面に表示する文字だけが欲しい場合は、text()を使ってタグを取り除き、中の文字列を取得するのじゃ!!」

文字だけ取得

doc.select("p").text();

すると、

カレー
ラーメン
ハンバーガー

だけを取得できる。

たきの「バナナの皮をむいて、実だけ食べるようなものか…」

たきの「じゃあ、いつもタグは捨てちゃっていいってことですよね?」

博士「それは違うぞ。」

たきの「え?」

博士「食べるなら皮はいらんが、『バナナの品種』や『賞味期限シール』を確認したいなら皮も必要じゃろ?」

博士「HTMLも同じで、文字だけ欲しいならtext()、リンクや属性、HTMLの構造を利用したいならタグの情報を残したまま扱うのじゃ!」

リンクだけ取得

HTML

<a href="/news">ニュース</a>

Java

doc.select("a").attr("href");

これで、

/news

を取得できるんじゃ。

好きなサイトから自由に情報を取得してもいいのですか?

博士「サイトによっては、利用NG自動アクセス禁止などのルールが定められておる。」

たきの「そうなんですね。それはどこで確認できるのですか?」

博士「サイトの利用規約robots.txtから確認できるのじゃ。」

たきの「robots.txt…?初めて聞きました…」

博士「例えば、」

https://example.com/robots.txt

博士「のようにアクセスすることで確認できるのじゃ。もちろん、ないサイトもあるがな。」

博士「技術的に取得できることと、取得してよいことは別じゃ。」

博士「ルールを守って使うのじゃぞ。」

たきの「わかりました博士!」


まとめ

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 JsoupSample {

    public static void main(String[] args) {

        try {

            // ① Webページを取得する
            Document doc = Jsoup.connect("https://example.com").get();

            // ② <p>タグをすべて取得する
            Elements elements = doc.select("p");

            // ③ 取得した<p>タグを1つずつ取り出す
            for (Element element : elements) {

                // ④ <p>タグの中の文字だけを表示する
                System.out.println(element.text());

            }

        } catch (IOException e) {

            // Webページの取得に失敗した場合
            System.out.println("ページを取得できませんでした。");

        }
    }
}

たきの「博士ありがとうございました!」

博士「ふむ。がんばるのじゃ。たきのくん」

博士「今日の一句じゃ。」

今日の一句

ページから 具だけをすくう Jsoup

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?