2016-05-03 35 views
0

我正在使用Nokogiri gem來解析網頁文檔。然而,我試圖在使用AngularJS(我相信)的網站上做到這一點,當我將它加載到Nokogiri時,它沒有格式化爲我在瀏覽器中訪問該頁面時看到的格式。我如何使它加載,因爲我可以預期,所以我可以通過CSS選擇器解析它?如何解析Nokogiri的AngularJS頁面?

網址:http://www.ukathletics.com/sport/m-footbl/roster/#/2015/Players/table

代碼

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) 

回答

0

我很困惑,爲什麼你正在使用水豚,然後試圖解析與引入nokogiri的頁面?使用水豚只有你可以不喜歡的東西一樣

roster_table = page.find(:css, 'div.player_table table') 
headers = roster_table.all(:css, 'thead tr') 

等等

+0

我不知道有關...謝謝!我原本沒有使用水豚,但遇到了一些似乎沒有正確加載的頁面,這就是爲什麼我最終通過水豚傳遞的東西。 – daveomcd

+0

另外,我嘗試了你提到的代碼,但是我沒有看到Capybara在哪裏完全加載了文檔。所以我沒有回到你的代碼結果。 – daveomcd

+0

@daveomcd它沒有完全加載文件 - 它在capybara-webkit提供的「瀏覽器」中查詢它 - 當你說沒有結果時,你的意思是在頭文件中?或roster_table?標題可能會返回一個空數組,因爲找不到結果對'#all'有效,因此它不會等待結果出現。你可以使它等待結果(通過xhr請求等加載)出現,通過給它一些東西來找到它,例如:header = roster_table.all(:css,'thead tr',minimum:1)稍等一會,直到thead元素中至少有一行,然後返回它。 –