2014年9月13日土曜日

過去データすべてを取得する -urlからhtmlの取得

前回までのところで株価データを一日分取得することが出来ました。
http://mosirobo.blogspot.jp/2014/09/javahtml_4.html
http://mosirobo.blogspot.jp/2014/09/javahtml.html
http://mosirobo.blogspot.jp/2014/09/javahtml.html
しかし、一日のデータのみで今後の傾向をつかむことはできないと思いますので、
できればこれまでのデータが全て欲しいです。
ということでそうなるように改良していこうと思います。



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class getURL5 {
 public String getURL5(int ccode, String eyyyymmdd, String syyyymmdd) {
  String aa = "";
  //String syyyymmdd = "19830101";
  //String eyyyymmdd = "20140909";
  String syyyy = syyyymmdd.substring(0, 4); //20140914前から4文字
  String smm = syyyymmdd.substring(5, 6);  //前から5.6文字
  String sdd = syyyymmdd.substring(7, 8);  //前から7,8文字
  String eyyyy = eyyyymmdd.substring(0, 4);
  String emm = eyyyymmdd.substring(5, 6);
  String edd = eyyyymmdd.substring(7, 8);
  int page = 1;
  while(page<100){  //ページ数を繰り返す
  try {
   String url = reqUrl + page;
   //System.out.println(url);
   String bb ="";
   bb = getSourceText(new URL(url));
   aa = aa+bb;
   page = page+1;
  } catch (MalformedURLException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }
  }
  return aa;


    }
 public static String getSourceText(URL url) throws IOException {
  InputStream in = url.openStream(); //接続

  //文字エンコーディング
  InputStreamReader isr = new InputStreamReader(in, "UTF-8");

  StringBuilder sb = new StringBuilder();

  try {
   /*
    * //接続
   URLConnection urlConn = urlObj.openConnection();

   //文字エンコーディング
   InputStreamReader isr = new InputStreamReader(urlConn.getInputStream(), "UTF-8");

   //入力ストリームを生成
   BufferedReader br = new BufferedReader(isr);
    */
  BufferedReader bf = new BufferedReader(new InputStreamReader(in));
  String s;
  while ((s=bf.readLine())!=null) {
  sb.append(s);
  }
  } finally {
  in.close();
  }
  return sb.toString();
  }

}



と、URLからのHTMLの取得はこんなところです。
urlのに始まりと終わりの日付を入力するところがあるので、そこに日付を代入し、後はループを回すだけです。
ループはページ数を入力がurlの最後にあるので、ページを1から順に入れていきます。
後は引数として受け取った始まりと終わりの日付ですが、
こちらの方でどのように入力するかを決めてしまえば文字列の分解で何とかなります。

またここでは1ページずつ正規表現でマッチングを行うのではなく、
最初から最後の日付のページまでをまとめて1つの変数に受け取り、次のマッチング関数で順々に配列に入れていこうと思っています。

0 件のコメント:

コメントを投稿