SlideShare a Scribd company logo
1 of 16
Download to read offline
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
利用例の紹介でした

More Related Content

What's hot

jQueryを中心としたJavaScript
jQueryを中心としたJavaScriptjQueryを中心としたJavaScript
jQueryを中心としたJavaScripthideaki honda
 
Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会Takuro Sasaki
 
MySQL Fabricつらい
MySQL FabricつらいMySQL Fabricつらい
MySQL Fabricつらいyoku0825
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺Yusuke Wada
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようYuusuke Takeuchi
 
小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレ小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレMuyuu Fujita
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Frameworkkamiyam .
 
JekyllとBootstrapを使って静的なブログを作ってみたよ
JekyllとBootstrapを使って静的なブログを作ってみたよJekyllとBootstrapを使って静的なブログを作ってみたよ
JekyllとBootstrapを使って静的なブログを作ってみたよMatsuo Obu
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門Kohei Kadowaki
 
JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術Takuro Sasaki
 
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築AimingStudy
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2Moto Yan
 
閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とはMuyuu Fujita
 
Getting start with knockout.js
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.jsAkio Ishida
 
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決までRyuma Tsukano
 
20150207 elastic loadbalancer
20150207 elastic loadbalancer20150207 elastic loadbalancer
20150207 elastic loadbalancerDaiki Mori
 
Angular js or_backbonejs
Angular js or_backbonejsAngular js or_backbonejs
Angular js or_backbonejsOmasa Yusaku
 

What's hot (20)

jQueryを中心としたJavaScript
jQueryを中心としたJavaScriptjQueryを中心としたJavaScript
jQueryを中心としたJavaScript
 
Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会Rubyで操るAWS 第67回Ruby関西 勉強会
Rubyで操るAWS 第67回Ruby関西 勉強会
 
20150523
 20150523 20150523
20150523
 
MySQL Fabricつらい
MySQL FabricつらいMySQL Fabricつらい
MySQL Fabricつらい
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
Jaws ug shimane-1
Jaws ug shimane-1Jaws ug shimane-1
Jaws ug shimane-1
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしよう
 
小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレ小規模案件で作られた秘伝のタレ
小規模案件で作られた秘伝のタレ
 
Webpackにトライ 基本編
Webpackにトライ 基本編Webpackにトライ 基本編
Webpackにトライ 基本編
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Framework
 
JekyllとBootstrapを使って静的なブログを作ってみたよ
JekyllとBootstrapを使って静的なブログを作ってみたよJekyllとBootstrapを使って静的なブログを作ってみたよ
JekyllとBootstrapを使って静的なブログを作ってみたよ
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
 
JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術
 
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは閉じタグを超えた先に僕が見た景色とは
閉じタグを超えた先に僕が見た景色とは
 
Getting start with knockout.js
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.js
 
実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで実践Backbone.Marionette 現場の悩みと解決まで
実践Backbone.Marionette 現場の悩みと解決まで
 
20150207 elastic loadbalancer
20150207 elastic loadbalancer20150207 elastic loadbalancer
20150207 elastic loadbalancer
 
Angular js or_backbonejs
Angular js or_backbonejsAngular js or_backbonejs
Angular js or_backbonejs
 

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

20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出Kenichi Kinoshita
 
俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) 俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) Seiichiro Ishida
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会Naoki Sekiguchi
 
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwwwジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww今城 善矩
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、RubyやめるってよNarihiro Nakamura
 
What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7Akinori Musha
 
CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話Yusuke HIDESHIMA
 
G*ワークショップ+忘年LT大会
G*ワークショップ+忘年LT大会G*ワークショップ+忘年LT大会
G*ワークショップ+忘年LT大会ikikko
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみた
2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみた2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみた
2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみたAya Komuro
 
gcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakamigcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakamiHiroshi Kawakami
 
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure CodingPyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure CodingGouji Ochiai
 
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementationビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic ImplementationTadayoshi Sato
 
Iotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたいIotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたいMasaki Yamamoto
 
FIDOとWebAuthnとCTAPのはなし
FIDOとWebAuthnとCTAPのはなしFIDOとWebAuthnとCTAPのはなし
FIDOとWebAuthnとCTAPのはなしSatoshiSuzuki23
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
20151126 cookpad talk_test_engineer
20151126 cookpad talk_test_engineer20151126 cookpad talk_test_engineer
20151126 cookpad talk_test_engineerKazuaki Matsuo
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法Takuma Watabiki
 

Similar to Capybaraで雑にWebスクレイピング (20)

20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出20200216 MacBook Proで姿勢検出
20200216 MacBook Proで姿勢検出
 
俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) 俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり)
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会
 
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwwwジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7
 
CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話CoffeeScript+enchant.jsでクロージャが気持よくかけた話
CoffeeScript+enchant.jsでクロージャが気持よくかけた話
 
Slide
SlideSlide
Slide
 
G*ワークショップ+忘年LT大会
G*ワークショップ+忘年LT大会G*ワークショップ+忘年LT大会
G*ワークショップ+忘年LT大会
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみた
2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみた2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみた
2013/12/05 JAWS-UG福岡 re:Inventに行って来た&limited previewから返事が来るまでKinesisのドキュメント読んでみた
 
gcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakamigcpug_okinawa_#2_hiroshi_kawakami
gcpug_okinawa_#2_hiroshi_kawakami
 
PyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure CodingPyCon APAC 2013 Web Secure Coding
PyCon APAC 2013 Web Secure Coding
 
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementationビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
ビジネスロジック実装進化論 - An Evolution of Business Logic Implementation
 
Iotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたいIotlt 28 HoloLensに日本語聞いてもらいたい
Iotlt 28 HoloLensに日本語聞いてもらいたい
 
FIDOとWebAuthnとCTAPのはなし
FIDOとWebAuthnとCTAPのはなしFIDOとWebAuthnとCTAPのはなし
FIDOとWebAuthnとCTAPのはなし
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
20151126 cookpad talk_test_engineer
20151126 cookpad talk_test_engineer20151126 cookpad talk_test_engineer
20151126 cookpad talk_test_engineer
 
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
 
210630 python
210630 python210630 python
210630 python
 

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