1

<td>XPathとNokogiriを使用して特定のクラス名でを取得するにはどうすればよいですか?テーブルはネストされており、一部にはIDまたはクラスがないため、次のようなものをネストすることはできません。

//table/tbody/tr/td

これが私がこれまでに持っているものです:

doc = Nokogiri::HTML(open("http://www.goalzz.com/default.aspx?c=8358"))
  doc.xpath('//td[@class="m_g"]').each do |node|
  pp node.to_s
end

何か案は?そのクラス名のsはほとんどない<td>ので、すべて取得したいと思います。

4

2 に答える 2

1

これらのクラス属性はtd正確に「m_g」ですか、それとも1つのクラスに複数のクラスがありtdますか?後者の場合、このXPathは機能する可能性があります。

//td[contains(@class, "m_g")]
于 2013-01-10T17:46:52.570 に答える
1

宝石「capybara-webkit」を使用することは、この Web サイトを完全に JavaScript でレンダリングされたビューで操作する実行可能な方法です。

これは、capybara-webkit スクリプトがどのように見えるかのスクラッチの例です。

#!/usr/bin/env ruby
require "rubygems"
require "pp"
require "bundler/setup"
require "capybara"
require "capybara/dsl"
require "capybara-webkit"

Capybara.run_server = false
Capybara.current_driver = :webkit
Capybara.app_host = "http://www.goalzz.com/"

module Test
  class Goalzz
    include Capybara::DSL

    def get_results
      visit('/default.aspx?c=8358')
      all(:xpath, '//td[@class="m_g"]').each { |node| pp node.to_s }

    end
  end
end

spider = Test::Goalzz.new
spider.get_results

この場合 (ページが動的に作成されるため) xpath の例を見つけるために必要なのは、完全に機能する JavaScript Web 駆動エンジンです。

于 2013-01-10T18:30:10.860 に答える