スクリーンスクレイピングの具体的なやり方を少しだけでもお伝えしたいと思います。
ちゃんと開発すればAPIと同等の信頼性はあります。
.
あなたの投資を自動化します
オートマチックトレード
松村博史
.
・
今週はすっかり開発脳です。
発信する情報も開発がらみになってしまってます。あしからず。
javaでスクリーンスクレイピングをするのに採用したライブラリがJsoup
Jsoupでの手順は
- コネクションを作る
- 実行(通信) する
- 帰ってきた情報を解析する
以上。
早速コードです。
/*
* ログインする
*/
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の方はこちら