今回は、JavaでWebページにアクセスする処理を作るときの内容を記載します。
サンプルコードはGithubにアップしてあります。
1.ウェブにアクセス
プログラムでウェブにアクセスする部分に関して記載します。コードの説明になりますが。。。
System.out.println("*** execute ***");
String url = "https://ja.wikipedia.org/wiki/%E6%AD%A6%E5%99%A8";
Document doc = null;
try {
doc = Jsoup.connect(url).get();
} catch (IOException e) {
e.printStackTrace();
}
変数の「url」にアクセスします。
処理の内容としては以下の通りです。
- アクセスするURLを指定します。つまり変数に代入します。
- そして、取得したHTMLをDocumentクラスに変換して取得します。
doc = Jsoup.connect(url).get();
- 取得するときに例外(IOException)が出る可能性がある→メソッドの定義にthrows IOExceptionがある、のでtry chatchで囲む
2.HTMLの取得
これも同様に、コードから見ていきます。
Elements eles = doc.getElementById("toc").children();
for (int i = 0; i < eles.size(); i++) {
Element item = eles.get(i);
System.out.print("wholeText(): " + item.wholeText());
System.out.println(" / text(): " + item.text());
printIndex(item, i);
}
Jsoupのフレームワークを使うと言う部分になります。
ドキュメント(Document)クラスを中心にして取得します。
doc.getElementById("toc").children()
このコードでid="toc"
と記述されたHTMLを取得します。
実際には[Wikiの「武器」ページ](https://ja.wikipedia.org/wiki/%E6%AD%A6%E5%99%A8)から目次の部分を取得します。
具体例参照するぺーじのHTML
![](http://zenryokuservice.com/wp/wp-content/uploads/2020/03/スクリーンショット-2020-03-23-20.49.38-300x192.png)
<div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none"><div class="toctitle" lang="ja" dir="ltr"><h2 id="mw-toc-heading">目次</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span></div>
目次のタグ部分です。はじめのタグ(一番外側のタグです)を取得しています。
よくJSで以下のような実装を行いますが、それと同じです。
var tag = document.getElementById("タグのID");
取得したタグからタグの中にある子供のタグを取得します。
## タグの取得
例えば、下のようなHTMLから。。。
<div class="toctitle" lang="ja" dir="ltr"><h2 id="mw-toc-heading">目次</h2><span class="toctogglespan"> <label class="toctogglelabel" for="toctogglecheckbox"></label></span> </div>
以下のようなコードを実行したとします。
```java
Document doc = Jsoup.connect(url).get();
// HTMLボディの取得
Element body = doc.body();
Elements eles = body.getElementById("toctitle");
eles.text();
```
と実装すると「目次」が取得できます。(間違ってたらごめんなさい。。。)大切なのは、子供のタグを取得(Elements)してElements#child()
子供のタグを取得すると言うわけです。
## 結論から言うと
実装して動かしてみるのが一番ですが、サンプルコードとして。。。
```java
Element body = doc.body();
Elements eles = body.getElementsByTag("h2");
System.out.println("size: " + eles.size());
Elements eles = doc.getElementById("toc").children();
for (int i = 0; i < eles.size(); i++) {
Element item = eles.get(i);
System.out.print("wholeText(): " + item.wholeText());
System.out.println(" / text(): " + item.text());
printIndex(item, i);
}
```
## 関連ページ
Java Basic
- Java Basic Level 1 〜Hello Java〜
- Java Basic Level2 〜Arithmetic Calculate〜
- Java Basic Level3 〜About String class〜
- Java Basic Level 4〜Boolean〜
- Java Basic Level 5〜If Statement〜
- Java Basic Summary from Level1 to 5
- Java Basic Level 6 〜Traning of If statement〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 8.5 〜Array〜
- Java Basic Level 9〜Training of for statement〜
- Java Basic Level 10 〜While statement 〜
- Java Basic Swing〜オブジェクト指向〜
- Java Basic Swing Level 2〜オブジェクト指向2〜
- サンプル実装〜コンソールゲーム〜
- Java Basic インターフェース・抽象クラスの作り方
- Java Basic クラスとは〜Step2_1〜
- Java Basic JUnit 〜テストスイートの作り方〜