2012年10月16日火曜日

JAVAでスクレイピングを実現するための覚書 1

第1回の投稿はスクレイピングについてです。
スクレイピングとはウェブサイトなどのほしいデータを抽出して利用することをいいます。
最近では大手サイトではAPIが提供されていますが、スクレイピングを必要とする場面はまだまだ多いです。

スクレイピングの流れ

大きく分けて以下3過程になります
  • 接続
  • 取得
  • 解析 
最も難しい過程は解析になります。
HTML解析はフリーから有料のものまで検索をかけると様々ありますが。
今回は簡易的なものを自作をしていきます。
この投稿では取得したサイトのHTMLソースの表示まで行います。

接続

1.URLオブジェクトの生成
 URL url = new URL("任意のURL");
2.接続オブジェクトの取得
 HttpURLConnection httpoc = (HttpURLConnection)url.openConnection();
3.接続
 httpoc.connect();

接続はこれで完了です。
ここでは接続オブジェクトの取得後、HTTPメソッド、ヘッダを指定して接続できます。
接続切断はdisconnect()で行います。

取得

入力ストリームを取得、表示
BufferedReader bstr = new BufferedReader(new InputStreamReader(httpoc.getInputStream()));
        String str;
            while ( (str=bstr.readLine())!= null ){
                System.out.println(str);
            }
        bstr.close();

 バッファリングすることで、入力ストリームから効率良く読み込んでいきます。
 以上で取得、表示は完了です。

次回はParserCallbackを利用した簡易なHTML解析を行います。


サンプルソース


  URL url = new URL("");
  HttpURLConnection httpoc = (HttpURLConnection)url.openConnection();
  httpoc.connect();
  
  
  BufferedReader bstr = new BufferedReader(new InputStreamReader(httpoc.getInputStream()));
  String str;
   while ( (str=bstr.readLine())!= null ){
    System.out.println(str);
   }
  bstr.close();
  httpoc.disconnect();