Java network 〜クローリング〜

イントロダクション

前回作成した、コマンド画面で入力した文字を…
つまり、画面を作り、コマンドプロンプトのコマンド実行の結果を取得することこまで実装しました。

とりあえず、キリの良いところまで、実装できました。現状何をするのか決まっていませんが、インターネット検索を行い必要な情報を取得する機能が欲しいと思っている所ですので、クローリングに挑戦したいと思います。

クローリング

クローリング…筆者もよくわかっていないので調べます。
以下のステップで検索して、結果を出します。

1. Googleの検索テキストボックスに文字列を入力する
2. 適当なサイトの中身を読み記載内容を自分の中でまとめます。
3. まとめた内容から理解します。
※「理解する」というのが抽象的ですので「〜はXXXをする○○○である」というふうに情報を
  整理することを指し示す事とします。

そして、自分が調べてみた所

「クローリングとは、ウェブサイトに辿り着く→ 解析 →リンクを辿る処理を繰り返し行うプログラムのこと」という結果が出ました。

参考にしたサイトは以下のサイトです。
https://nandemo-nobiru.com/3661/#0102

理想と現実

なんでも「こーだったらいいな」っていう事と「実際にできることは、ここまでだよね」っていう事があると思います。
その通りだと思います。ならば「こーだったらいいな」に近づけるために「実際こーだよね」っていうことを掘り下げます。
つまり、理想と現実を並べてみて現状、どの部分からなら着手できるかを探します。

やってみましょう(プログラム初心者の場合)

理想は、クローリングを実装してウェブ上から欲しい情報を取得、まとめた形でレポートを作成し、それを出力して自分が確認できる事。
現状は、すでにあるフレームワーク(ライブラリやツール)を使う為の勉強と実装を行っていく事が一番の早道になると思います。
でわ、ライブラリやフレームワークを探します。
そして、Javaをメインにやっているので以下の4点を見つけました。
参照サイトはこちらになります。
・jsourp
・crowler4j
・Apache Tika
・Apache Nutch

フレームワークは何を使う?

ぶっちゃけてなんでも良いと思います。筆者は自分で作成しようかと思っていました。が書いている最中に「初心者向けに。。。」と考えたらフレームワークの方が良いのではないかと思った次第です。
しかし、フレームワークだろうが、なんだろうがJavaを使用している限りはJDKを使用してるので自分で作る方向で行きましょう。というわけで

結論、corwler4jを使用しよう

Gitにありました。「corwler4j

次回は、このページを勉強してみようと思います。

クローラー4Jを使う

上記のGithubのページを見てみると、使い方がコードも一緒に載っています。
使い方をみると以下のようになっていました。

1.インストール

Mavenを使用する方法と、Gradleを使用する方法がありました。
Mavenを使用する場合は、以下の依存関係、タグをPOMファイルに追加します。dependenciesタグの中に追加します。

ちなみにMavenをメインで使っているのでGradleは、ほぼ使ってません。すいません。。。

    <dependency>
        <groupId>edu.uci.ics</groupId>
        <artifactId>crawler4j</artifactId>
        <version>4.4.0</version>
    </dependency>

Gradleは以下のようにやります。これもコードを追加するだけです。

compile group: 'edu.uci.ics', name: 'crawler4j', version: '4.4.0'

2.実装

Githubにあるプログラムを拡張して使用する形でクローラーを作成するという作業が必要です。
ズバリ、以下のような手順を踏むように記述がありました。

  1. WebCrawlerクラスを継承する
    • shouldVisitメソッドのオーバーライド
    • visitメソッドのオーバーライド
  2. 上記のクローラーを起動する
    • シードページなどを設定(コンストラクタで引数に渡す)

これで行けるようです。現在作成中のテキストRPGの実装後に実装ってみたいと思います。

次回は、JDKに含まれているjavaパッケージを使用しようと思います。
でわでわ。。。

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す