16
Capybara雑にWebスクレイピング @kozy4324

Capybaraで雑にWebスクレイピング

Embed Size (px)

Citation preview

Capybaraで雑にWebスクレイピング

@kozy4324

自己紹介

● 中村 浩士 (なかむら こうじ)

● @kozy4324 (GitHub, Twitter)

ポケモンGO やってますか?

ありがちなユースケース

● ミニリュウかわいいよ、ミニリュウ!● 会社近辺に出現したら 仕事をサボってでも

即座に捕まえに行かなければ!● ポケモン探索サービス (e.g. PokeVison) を

定期的にチェックして出現したら通知したい

Capybaraとは?

● ブラウザテストのフレームワーク● ブラウザ操作の内部DSLを提供してくれる● ドライバを変更することでブラウザを

切り替えることが出来る– Selenium (WebDriver)

– PhantomJS (ヘッドレスブラウザ)

– etc...

これで問題解決を試みる!

対象ページ

● 今回は P-GO SEARCH を利用させてもらったhttps://pmap.kuku.lu/※特定サービスへのWebスクレイピングは自己責任でお願いします

下準備

(雑に)実装

● MacOSX の open コマンドを最後に実行しているので、このスクリプトは特定の環境でしか動きません

(雑に)実行

● これで会社近辺にミニリュウが出現したらブラウザに該当ページが表示される!

雑ポイント (1)

● API解析とかしない– Ajaxな動的コンテンツをまるっと扱えるので楽

● ターゲット(ミニリュウ)のチェックは該当要素の存在可否をCSSでチェック– has_css? メソッド– CSSセレクタはDevToolsで抽出して調整すると楽

雑ポイント (2)

● 通知=ブラウザでページ開く– 「とりあえず気づければいいや」の精神– 真面目にやるならば Slack 通知とか

● 定期実行=シェルスクリプト– 「ソフトウェアを梃子として使う」の精神

今後の展望(あるならば、たぶんない)

● 実行の度にブラウザが起動してウザい– ヘッドレスブラウザのドライバに切り替えよう– Poltergeist など

● 通知や定期実行– herokuなどで動かしてSlack通知とか出来ると

素敵ですね● Slack Bot とか

– Ruboty とかで実装すると素敵ですね

まとめ● 雑にWebスクレイピングをしたい場合は Capybara を

オススメしたい– Ajax な動的コンテンツを気にする必要なし– CSSセレクタ、あとはページコンテキストでのJS実行

なども可能なので、慣れ親しんだ Web の技術でだいたいの問題が解決できる

– ただし富豪的なアプローチではある● 仕事中でもミニリュウを捕まえることが出来ますね

– 実際はちゃんと真面目に働いてますよ!

免責

● 特定サービスの Web スクレイピングは自己責任でお願いします– この記事は Web スクレイピングを助長するもので

はありません– あくまで問題解決の一手法としての Capybara

利用例の紹介でした