Ich verwende Nokogiri-Juwel, um ein Webseiten-Dokument zu analysieren. Ich versuche es jedoch auf einer Website, die AngularJS verwendet (glaube ich), und wenn ich es in Nokogiri lade, ist es nicht so formatiert, wie ich es beim Besuch der Seite in meinem Browser sehe. Wie kann ich es so laden, wie ich es erwarten würde, damit ich es über CSS-Selektoren analysieren kann?Wie kann ich eine AngularJS-Seite mit Nokogiri analysieren?
Url: http://www.ukathletics.com/sport/m-footbl/roster/#/2015/Players/table
-Code
require 'open-uri'
require 'nokogiri'
require 'capybara-webkit'
require 'capybara/dsl'
require 'byebug'
require './ncaa_school_sites'
require './functions'
include Capybara::DSL
Capybara.current_driver = :webkit
Capybara::Webkit.configure do |config|
config.block_unknown_urls
NcaaSchoolSite.where(code: 'KYUN').order(:code).each do |school|
config.allow_url("*#{school.website_url}")
end
end
visit(school.roster_url)
doc = Nokogiri::HTML.parse(body)
byebug
roster_table = doc.css("div.player_table table")
headers = retrieve_headers(roster_table.css("thead tr"))
process_player_rows(roster_table, headers, school,"tbody td",1)
ich, dass über nicht bewusst war ... Dank! Ursprünglich verwendete ich keinen Capybara, aber ich stieß auf einige Seiten, die anscheinend nicht richtig geladen wurden, weshalb ich am Ende Capybara passierte. – daveomcd
Ich habe auch versucht, den Code, den Sie erwähnt haben, aber ich sehe nicht, wo Capybara das Dokument auch vollständig geladen hat. Daher erhalte ich mit Ihrem Code keine Ergebnisse. – daveomcd
@daveomcd Das Dokument wird nicht vollständig geladen - es wird im "Browser" von capybara-webkit abgefragt - Wenn Sie keine Ergebnisse sagen, meinen Sie das in Kopfzeilen? oder roster_table? Header können ein leeres Array zurückgeben, da das Finden von Ergebnissen für '# all 'nicht gültig ist, so dass nicht auf Ergebnisse gewartet wird. Sie können es warten, bis Ergebnisse (geladen über xhr-Anfragen usw.) erscheinen, indem Sie ihm eine Anzahl von Dingen geben, die zu finden sind, zum Beispiel 'headers = roster_table.all (: css, 'thead tr', Minimum: 1)' zum Beispiel Warten Sie ein wenig, bis mindestens eine Zeile in einem thead-Element vorhanden ist, und geben Sie sie dann zurück. –