こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Ruby初学者です。

Ruby初学者です。
スクレイピングをしています。

Capybara + PhantomJSを用いているのですが(動的要素も取得したいため)、

session.visit "sample.com"
variable = session.find_all(:xpath,"//a[contains(text(), "なんとか")]")
puts variable

といったコードを書くと

#<Capybara::Result:0x0325d6honyaefccf0f8>

という風な表示がされてしまいます。

上記の例に限らず、xpathで抽出したものをputs等を用いて表示しようとすると、上述のようにわけのわからん表示が出てきて困ります。
Nokogiriだとputsを使うとDOM?html?がそのまま文字通り表示されてくれるのですが。。
Capybaraだと何らかの変換を行うような処理がされてしまっているのですかね。(というかputsでコードを表示するような目的のものではない?)

解決方法(抽出したコードをputsでそのまま表示する方法)があれば教えてください。

投稿日時 - 2019-04-04 10:21:51

QNo.9603539

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>Nokogiriだとputsを使うとDOM?html?がそのまま文字通り表示されてくれるのですが。。
>Capybaraだと何らかの変換を行うような処理がされてしまっているのですかね。(というかputsでコードを表示するような目的のものではない?)

いやいや、逆です。Nokogiriが、テキスト化するようなメソッドを定義しているので見て分かるように表示され、Capybaraでは定義していないから、そのまま出てきます。

Capybaraは使ったことないですが、textメソッドで、innerHTMLを取得できるようですよ。

投稿日時 - 2019-04-04 23:36:05

お礼

なるほどです。
なんか直観には反してますが…ブラウザ側でもnokogiriと同じようにテキスト化するメソッドを定義しているのであって、本当はcapybaraと同じようなResult:0x0325d6honyaefccf0f8みたいな表示なんでしょうか?

兎に角、textメソッドを使ってみたいと思います。ありがとうございます

投稿日時 - 2019-04-05 09:34:58

あなたにオススメの質問