デスノートを今まで読んだことがなかったので、少年ジャンプ+ で読みはじめました!
- 前提知識
- キラの正体は知ってる
- デスノコラみたいなのはいくつか見たことがある
では今回の感想です。→→→
最初から結構殺してるんだな〜。
次回が楽しみです!
DEATH NOTE デスノート(1) (ジャンプ・コミックス)
- 作者: 大場つぐみ,小畑健
- 出版社/メーカー: 集英社
- 発売日: 2004/04/02
- メディア: コミック
- クリック: 211回
- この商品を含むブログ (932件) を見る
デスノートを今まで読んだことがなかったので、少年ジャンプ+ で読みはじめました!
では今回の感想です。→→→
最初から結構殺してるんだな〜。
次回が楽しみです!
DEATH NOTE デスノート(1) (ジャンプ・コミックス)
今日はスクレイピングの話をします。
今回のターゲットは三菱東京UFJダイレクト。金融機関もウェブサービスを提供するようになり、金にまつわる情報を電子化しやすくなりましたが、かれらが API を提供しているわけではないので、私たちのほうで取得・加工をしてやる必要があります。今やウェブサイトであれば当然のように JavaScript を使っているわけなので、いわゆる mechanize、つまり HTML の解釈をおこない、リンクのクリックやフォームの送信をシンプルに実装するようなやり方でのスクレイピングはすでに無理筋だといえます。
もちろん今日においてはブラウザオートメーションという方法がすでにありますので、これを利用してやれば、なんの憂いもなく実際に人間が使うようなブラウザをプログラマティックに操作することができます。現在は Selenium WebDriver がデファクトで、これが使用する JSON Wire Protocol というプロトコルを通じて様々なブラウザを操作できます。
JSON Wire Protocol の実装はいろいろな言語にありますが、今回は言語に JavaScript を利用することにして、クライアント側のライブラリとして Protractor と WebdriverIO をそれぞれ使ってみます。個人的に、過去には CasperJS というライブラリを利用してスクレイピングをしていました。これは PhantomJS という GUI なしの WebKit によるブラウザ実装を操作するライブラリですが、上に挙げたような方法で PhantomJS に限らないブラウザを操作できる(PhantomJS 自身も Ghost Driver という名前で WebDriver に対応しています)現在、PhantomJS(と SlimerJS)しか使えない CasperJS を選ぶ理由はなさそうです。
さて、Protractor と WebdriverIO それぞれについて見ていきます。
http://angular.github.io/protractor/
example-scrape-websites/protractor at master · motemen/example-scrape-websites · GitHub
git clone
してこのディレクトリで以下のコマンドを実行すると、Chrome が自動的に起動して三菱東京UFJダイレクトにログインし、残高を表示した上で先月の残高を YYYY-mm.tsv ファイルに書き出してくれます。
環境変数 MUFG_ID
, MUFG_PASSWORD
にそれぞれ必要な値を与えておいてください。
npm install npm run scrape-mufg
protractor
経由で起動するとテストファイルの内部で browser
というグローバル変数が定義され、これを通じて Protractor(や WebDriverJS)の API を使用できる。Protractor は AngularJS 用のライブラリなので、普通に使おうとすると AngularJS の読み込みを待ってから操作をはじめようとしてしまう。これを回避するには以下のようにしてやればいい。ただしいい感じに条件が整うまで実行を遅らせてくれるみたいな機能が使えなくなるので注意。
browser.ignoreSynchronization = true;
普通に ChromeDriver 経由で Chrome を起動すると、
サポートされていないコマンドラインフラグ --ignore-certificate-errors を使用しています。これにより、安全性とセキュリティが損なわれます。
というバーが表示される。銀行のサイトにアクセスするのにセキュリティを損なっては意味が無いので、protoractor.conf.js で Chrome に与えるオプションを制御して、当該のフラグを落とすということをしています。
example-scrape-websites/webdriverio at master · motemen/example-scrape-websites · GitHub
動かし方は Protractor の場合と同様です。ただしブラウザは Firefox が起動すると思う。
ちなみにこっちの方はお知らせを自動で読む機能はないです。お知らせが出る状態を意図的に作り出せないので……(だれか口座くれたら確認します)
Protractor 便利だな〜と思ってたけど機能もりもりすぎてかえってつらい。どちらにしろ JS で書くと Promise/コールバック地獄になるのは間違いないので、ちょっと面倒なところは面倒。スクレイピングを日常使いするなら、Selenium に与える設定でブラウザを PhantomJS に置き換えるよう指定すれば headless に実行できるので便利です。
JavaScript (node)から WebDriver を扱うものには他にもこんなライブラリがあるそうです:
この手の話をまとめだすと本一冊ぶんになっちゃうな〜と思ってたら、つい最近こんな本が出てました。具体的なテクを知るにはちょうどよさそうですね!
以下の本にも紹介があるそうです。
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
GitHub を使って Pull Request ベースで仕事しているとこんなことがありますよね……
( ^o^) LGTM もらった!:sushi:
( ˘⊖˘) 。o(CI 通ったらマージしよう)
|花金|┗(☋` )┓三
( ◠‿◠ )☛ マージしてから帰れよ
▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂ 忘れてたああああああ
Issue/PR のタブを開きすぎて、自分のにしろ他人のにしろ何がどこにあってステータスがわからなくなってしまうという問題もありますね。
そんなときに便利なユーザースクリプトがこちら。
GitHub PR Build Status in Favicon
chrome://extensions に放り込むなどしてインストールすると、ビルドステータスが設定されている Pull Request(例)では、Favicon の右下にそのステータス(最新コミットのもの)を表す色が描かれます(Favicon に注目):
GitHub はステータスに変化があったときや新たなコミットが追加されたときもリアルタイムにページの内容を更新してくれますが、そのような場合にも追随して Favicon を再描画するので、放っておいてもひと目で PR の様子がわかります。
インストール後、動きを試してみたい人は Travis CI の Recent を見てみると最新の PR を漁ることができますよ。