4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スクレイピングし特定の要素をファイルに書き出す

Last updated at Posted at 2018-02-08

やること

jsoupというライブラリを使ってスクレイピングし、特定の要素をファイルに書き出す。その際JSON形式で書き出す。(eclipseで動作)

背景

サービスの連携先を調べていたら、幸運にも(?)たくさん連携先があるサービスに出会いました。これらのサービス名をコピーしてJSON形式{"Name":"Service_name","Connectivity":"1"}に入れていくのは大変だと思い作成。
今回扱うサービスはHighriseの連携先

使うライブラリ

jsoupというHTMLをスクレイピングができるライブラリを使う。
公式ページ:http://jsoup.org/
ダウンロードページ:http://jsoup.org/download

Webページのどのタグに欲しい情報があるか確認

HTMLを見てみると、、
image.png
となり欲しい情報(サービスの名前)はappクラスのh4タグのaタグの中であると確認できました。

Eclipseにダウンロードした.jarファイルを追加

[package]を右クリック→[ビルドパス]→[ビルドパスの構成]をクリック
以下の画面が表示される。
image.png
[外部JARの追加]をクリックし、先ほどダウンロードしたjsoupの.jarファイルを選択
image.png
その後[適用して閉じる]をクリック。これで追加完了。
"参照ライブラリー"というものができていてその中に追加された.jarファイルが入っていることを確認。
image.png

コードの作成

jsoupをインポート

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

上記を記述。

ファイル操作を書いていく

例外処理など忘れずに。

Main.java
import java.io.FileWriter;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Main {

 public static void main(String[] args) {
  FileWriter fw = null;
  try {
    //ファイルの書き込み
  }catch(IOException e) {
         System.out.println("ファイル書き込みエラーです");
    }finally {//ファイルを閉じる
        if(fw != null) {
            try {
            if(fw != null) {
              fw.close();
            }
            }catch(IOException e2) {}
        }
     }
 }
}

ファイルの書き込み部分にコードを書いていく

Main.java
                        //ファイルを開く
			fw = new FileWriter("[書き込むファイルのパス]", true);
			//ファイルに書き込む
			Document document = Jsoup.connect("https://highrisehq.com/extras/").get();
			Elements elements = document.select(".app h4 a");
			for (Element element : elements) {
				String name = element.text();
				fw.write("{\"Name\":\"" + name + "\",\"Connectivity\":\"1\"}\n");
				System.out.println(name);
			}
			fw.flush();

 Jsoup.connect("URL").get();でWebサイトのHTMLを読み込み
document.select("タグ");で必要なHTMLタグを見つける。この場合、複数該当するのでelementsには該当するものが全部入っています。
forで1つづつ取り出します
element.text();で該当したHTMLのテキストを取得。(属性の場合はtextではなくattr("属性名")
ファイルに書き込む際はJSON形式なので今回は{"Name":"Service_name","Connectivity":"1"}に合わせる。

こんな感じで書き出せました。めでたしめでたし。
image.png

※サイトの連携先一覧におすすめサービスがあり4つ重複がありました。(書き出したもののはじめ4つ)

参考にさせていただいたもの

ありがとうございました。
jsoup使い方メモ:https://qiita.com/opengl-8080/items/d4864bbc335d1e99a2d7
Javaでスクレイピングをしよう!!:https://qiita.com/takahiroSakamoto/items/c2b269c07e15a04f5861
■[Java][Html Parser][jsoup]jqueryみたいに、htmlを操作できるJavaのライブラリ「jsoup」の使い方。:http://d.hatena.ne.jp/it-tech-dm/20110123/1295774869

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?