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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

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

Q&A

解決済

1回答

1703閲覧

Nokogiriでタグ内の文字列を指定して要素を取得したい

s_diff

総合スコア107

Ruby

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

0グッド

0クリップ

投稿2019/03/15 09:37

編集2019/03/15 09:38

###環境
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin17]
nokogiri (1.10.1)

###実装箇所

以下のようにgemのnokogiriを使ってスクレイピングしています。

ruby

1url = "http:website-no-url.com 2charset = nil 3html = open(url) do |f| 4 charset = f.charset 5 f.read 6end 7doc = Nokogiri::HTML.parse(html, nil, charset)

###実現したいこと

この後、
doc.xpath('//div[@class="box"]')
と入力すると、

<div class="box">&#13;
</div>

と返ってきますが、chromeの検証機能で確認すると子要素が存在します。
その子要素を取得したいのですが、どうすれば良いのでしょうか。

ご教示いただけることがあれば、何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Xpathが正しい前提で回答をします。

openで取得できるのは、動的にページが生成される前のものです。(※Mechanizeも同じ)
これに対して、「chromeの検証機能」で表示されるのは動的にページが生成されたあとのものです。
そのため、上のコードでは動的にページが生成される前のhtmlに存在しない要素は取得できません。

openでは、動的に生成される要素を扱えないので、WatirかCpybaraを使ってください。
(Watir, Capybara経由でSeleniumを使うほうが簡単なのでおすすめします。)

もしくは、ブラウザの「ページのソースを表示」で表示されるhtmlに
取得したい要素が別の形式で存在しないか、確認してXpathを作り変えてください。

投稿2019/03/15 11:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

s_diff

2019/04/02 04:18

capybara/poltergeistを使うことで取得できました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問