0

Facebook からアバターの src 属性を取得する必要があります。

doc = Nokogiri::HTML(open('http://www.facebook.com/zuck'))

それから私は試しました:

 avatar = doc.css('.photoContainer img')

しかし、空の結果を受け取りました。img src を取得するにはどうすればよいですか? そして、なぜ私の方法がうまくいかなかったのですか?

また、XPath ですべての imgs を検索しようとしましたが、まだ空の結果が返されました。

Nokogiri::HTML(open('http://www.facebook.com/zuck')).xpath("//img/@src").each do |src|
  puts src                                                  
end
4

1 に答える 1

2

問題は、.photoContainerアクセスしようとしているdivがページの実際のHTMLにないことです。これは、JavaScriptを介してDOMに挿入されるため、Nokogiriはそれを見ることができません。Nokogiriは、静的HTMLとXMLのみを解析できます。

JavaScriptによって生成されたDOMコンテンツにアクセスする場合は、watirseleniumなどの自動化されたWebブラウジングツールを試してみることをお勧めします。「Nokogiriはajaxでロードされたコンテンツを解析する」も参照してください。

アップデート:

カピバラを使用した統合テストに精通している場合は、セレクターをセレンなどのブラウジングツールのラッパーとして使用することもできます。これは、直接使用するのが少し難しい場合があります。

したがって、たとえば、コンソールでは次のようになります。

require 'capybara'
require 'capybara/dsl'

include Capybara::DSL
Capybara.default_driver = :selenium

次に、最初にポップアップを閉じてから、CSSを介して要素にアクセスすることにより、要素を取得できます。

visit('http://www.facebook.com/zuck')
find('a.layerCancel').click
find('.photoContainer img')['src']
#=> "http://profile.ak.fbcdn.net/hprofile-ak-ash3/c23.1.285.285/s160x160/73273_773684942011_2125564_n.jpg"
于 2012-10-23T12:57:16.183 に答える