SBI証券スクリーンスクレイピング

スクリーンスクレイピングの具体的なやり方を少しだけでもお伝えしたいと思います。

ちゃんと開発すればAPIと同等の信頼性はあります。

code

.

あなたの投資を自動化します
オートマチックトレード
松村博史

.

人気ブログランキングへ
にほんブログ村へ

今週はすっかり開発脳です。

発信する情報も開発がらみになってしまってます。あしからず。

javaでスクリーンスクレイピングをするのに採用したライブラリがJsoup

Jsoupでの手順は

  1. コネクションを作る
  2. 実行(通信) する
  3. 帰ってきた情報を解析する

以上。

早速コードです。


    /*
     * ログインする
     */
    public boolean doLogin() {

            Connection conn = null;
            Response res = null;
            Document doc = null;

            // login_formの取得
            String strURL = "https://site1.sbisec.co.jp/ETGate/";
            conn = Jsoup
                .connect(strURL)
                .header("Host", "site1.sbisec.co.jp")
                .header("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0")
                .header("Accept",
                        "text/html,application/xhtml+xml,application/xml, application/json, text/javascript, */*; q=0.01")
                .header("Accept-Language", "ja,en-us;q=0.7,en;q=0.3")
                .header("Accept-Encoding", "gzip, deflate")
                .header("Connection", "keep-alive").ignoreContentType(true).ignoreHttpErrors(true);;
            
	    try {
                res = conn.execute();
                doc = res.parse();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }


	    //レスポンスから必要情報の抽出            
            Elements form_login = doc.getElementsByAttributeValue("name","form_login");
            Elements inputs = form_login.get(0).getElementsByTag("input");

	    //ログインに必要なパラメータの設定
            HashMap<String, String> param = new HashMap<String, String>();
            for(Element ele :inputs){
                param.put(ele.attr("name"), ele.attr("value"));
            }
            param.put("user_id", "UserID");
            param.put("user_password", "Passwd");

	    //ログイン用アクセス
            try {
                res = conn.data(param).cookies(res.cookies()).execute();
                doc = res.parse();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }

            //判定
            if (res.cookies().containsKey("trading_site")) {
                return true;
            } else {
                return false;
            }
    }

コネクションを作るときに、URLとその他ヘッダーを指定します。


  conn = Jsoup
      .connect(strURL)
      .header("Host", "site1.sbisec.co.jp")
      .header("User-Agent", "Mozilla/5.0 (Gecko/20100101 Firefox/24.0")
      .header("Accept",
           "text/html,application/xhtml+xml,application/xml, application/json, text/javascript, */*; q=0.01")
      .header("Accept-Language", "ja,en-us;q=0.7,en;q=0.3")
      .header("Accept-Encoding", "gzip, deflate")
      .header("Connection", "keep-alive").ignoreContentType(true).ignoreHttpErrors(true);;

conn.execute()で通信します。

connとexecute()の間に何も入れなければ素の通信。

この間にクッキーを入れたり、パラメータを入れたりすることが出来ます。


res = conn.data(param).cookies(res.cookies()).execute();

帰ってきたレスポンスから内容を取得するのがparse()です。


doc = res.parse();

ここから様々な要素を取得することが出来ます。

また要素の取得方法が多岐にわたり使いやすいです。

クラスやIDはもちろん、タグ、属性と値を指定しても取得できます。


Elements form_login = doc.getElementsByAttributeValue("name","form_login");
Elements inputs = form_login.get(0).getElementsByTag("input");

ここまでできれば建玉取得、約定確認、発注はこの作業の繰り返しなので、地道な作業をするだけです。

ブラウザとにらめっこでどこに遷移させたいのか探し出しURLに指定します。

どんな情報を送ればいいのか探し出しパラメータに指定します。

そこが知りたい!って聞こえそうです。それは又の機会に。

注意!!

実際に稼働させるときには、ログイン情報は保存しておいて、毎回ログインさせない仕組みを作って下さい。

毎回ログインさせると、相手先サーバーの負荷が高くなるのでお行儀悪いです。

.
.

プログラム知識なしで利用できる自動売買システム
オートレシリーズ
http://www.autore.jp
トレトレシリーズ
http://www.tore-tore.com/

今日の記事がおもしろかったと思われた方是非クリックお願いします。

金融・投資 ブログランキングへ
株をされている方はこちら 証券先物の方はこちら FXの方はこちら
にほんブログ村 株ブログ 株 自動売買へ       にほんブログ村 先物取引ブログ 先物 システムトレードへ      にほんブログ村 為替ブログ FX システムトレード派へ

オートレ松村 について

オートマチックトレード株式会社 Automatictrade.Inc 機関投資家が行なっている自動売買も個人投資家も必要になる時代がくるとの思いから2006年自動売買関連システム専業のシステム開発会社を立ち上げる。 以来、個人投資家に自動売買サービスを提供する一方、証券会社のサービスの構築、証券会社とAPIを通じたコラボレーション、証券取引所から相談を受けたりなど、自動売買業界の先駆者として活動している。
カテゴリー: 開発 タグ: パーマリンク