Jak uzyskać <td>
z określoną nazwą klasy przy użyciu XPath i Nokogiri? Tabele są zagnieżdżone, a niektóre z nich nie mają identyfikatorów ani klas, więc nie mogę zagnieżdżać takich rzeczy:
//table/tbody/tr/td
Oto, co mam do tej pory:
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
Jakieś pomysły? Jest kilka <td>
z tą nazwą klasy i chcę je wszystkie zdobyć.
Odpowiedzi:
1 dla odpowiedzi № 1Korzystanie z gem „capybara-webkit” jest realnym sposobem na manipulowanie tą stroną w pełnym widoku javascript.
Oto przykład, jak mógłby wyglądać skrypt 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
To, co jest wymagane do znalezienia przykładowej ścieżki xpath w tym przypadku (ze względu na dynamiczne tworzenie strony), to w pełni funkcjonalny silnik JavaScriptu.
1 dla odpowiedzi nr 2
Czy są na nich atrybuty klasy td
s dokładnie „m_g”, czy też mają więcej niż jedną klasę na jednym td
? Jeśli jest to ten ostatni, ten XPath może działać:
//td[contains(@class, "m_g")]