質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

2969閲覧

[Ruby初心者] Capybara(gem)の使い方について

anvinon

総合スコア38

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2017/10/04 03:23

以下のサイトを見て、Capybaraというgemを利用したスクレイピングについて勉強しています。
Capybara+PhantomJS+Nokogiriを利用してスクレイピング
そして、以下のソースコードを読んでいましたが、わからない点があります。

ruby

1require 'capybara' 2require 'capybara/dsl' 3require 'capybara/poltergeist' 4 5class Scrape 6 #DSLのスコープを別けないと警告がでます 7 include Capybara::DSL 8 9 def initialize() 10 Capybara.register_driver :poltergeist_debug do |app| 11 Capybara::Poltergeist::Driver.new(app, :inspector => true) 12 end 13 14 Capybara.default_driver = :poltergeist 15 Capybara.javascript_driver = :poltergeist 16 end 17 18 def visit_site 19 page.driver.headers # => {} 20 #ユーザエージェントの設定(必要に応じて) 21 page.driver.headers = { "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36" } 22 #リファラーの偽装(特に不要) 23 #page.driver.add_headers("Referer" => "http://yahoo.co.jp") 24 page.driver.headers 25 visit('http://www.yahoo.co.jp') 26 #スクリーンショットで保存 27 page.save_screenshot('screenshot.png', :full => true) 28 #within(:xpath, "//*[@id='toipcsfb']/div[1]/ul[1]") do 29 #Nokogirオブジェクトの作成 30 doc = Nokogiri::HTML.parse(page.html) 31 puts doc.title 32 end 33end 34 35scrape = Scrape.new 36scrape.visit_site

以上のソースコードの後半部分でpageという物が突然出てきたので、これはどこから出てきたのか、何なのかわからず止まっています。該当部分は以下のとおりです。

ruby

1 def visit_site 2 page.driver.headers # => {} 3 #ユーザエージェントの設定(必要に応じて) 4 page.driver.headers = { "User-Agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36" } 5 #リファラーの偽装(特に不要) 6 #page.driver.add_headers("Referer" => "http://yahoo.co.jp") 7 page.driver.headers 8 visit('http://www.yahoo.co.jp') 9 #スクリーンショットで保存 10 page.save_screenshot('screenshot.png', :full => true) 11 #within(:xpath, "//*[@id='toipcsfb']/div[1]/ul[1]") do 12 #Nokogirオブジェクトの作成 13 doc = Nokogiri::HTML.parse(page.html) 14 puts doc.title 15 end

自分で調べた所、以下のサイトでこれかな?という物は見つかったのですが、「これはどこから出てきたのか?」という疑問と「これは何なのか?」という疑問は解けないままです。おそらく、CapybaraというgemにDSLと言うものがあり、DSLが持っているメソッドかな、と思っております。
Method: Capybara::DSL#page
0. pageは、どこから出てきたのか?

  1. pageは何なのか?

この2つの疑問についてご回答頂ければ嬉しいです。どちらか片方だけでも結構です。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

class Scrape
#DSLのスコープを別けないと警告がでます
include Capybara::DSL

includeメソッドで指定モジュールの定義を引き継いでいるため
Capybara::DSLのpageメソッドが使えます。

instance method Module#include
https://docs.ruby-lang.org/ja/latest/method/Module/i/include.html

投稿2017/10/04 06:44

shimitei

総合スコア799

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anvinon

2017/10/04 06:47

ご回答ありがとうございます。 なるほど!全くそこまで気が付きませんでした。ありがとうございます。
guest

0

Ruby

1require 'capybara/poltergeist' 2require 'nokogiri' 3 4 5class Scrape 6 def initialize 7 Capybara.register_driver :poltergeist do |app| 8 Capybara::Poltergeist::Driver.new(app, { js_errors:false, timeout:1000}) 9 end 10 11 Capybara.default_driver = :poltergeist 12 Capybara.javascript_driver = :poltergeist 13 end 14 15 def visit_site 16 page = Capybara::Session.new(:poltergeist) 17 page.driver.headers = { 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36' } 18 page.visit 'http://www.yahoo.co.jp' 19 page.save_screenshot('screenshot.png', full:true) 20 doc = Nokogiri::HTML.parse(page.html) 21 puts doc.title 22 end 23end 24 25scrape = Scrape.new 26scrape.visit_site
  1. Capybara::Session.new()に相当するもの?(予想)
  2. 質問者様が挙げられているリンクのCapybara::Sessionを

  押すとSessionについての説明を見ることができる。

参考:Rubyでスクレイピングしてみました。

投稿2017/10/04 06:28

編集2017/10/04 06:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anvinon

2017/10/04 06:48

ご回答ありがとうございます。 既に退会済みになってしまっていますが、参考リンクも含めて拝見します。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問