我觉得我必须如此接近这一点,但我似乎无法确定正确的表名来获取数据。有人可以快速看看这个并告诉我哪里出错了吗?很确定我目前没有从表变量中获取数据吗?
def oddsmath
require 'nokogiri'
tables_data = []
doc = Nokogiri::HTML(open("http://www.oddsmath.com/odds-comparison/"))
doc.css('table#table-odds-comparison.tbl-odds-comparison.tablesorter.tablesorter-default.hasStickyHeaders').each do |table|
# find all rows in the current table, then iterate over the second all the way to the final one...
table.css('tr')[1..-1].each do |tr|
# collect the cell data and raw names from the remaining rows' cells...
raw_name = tr.at('th').text
cell_data = tr.css('td').map(&:text)
# aggregate it...
tables_data += [raw_name, cell_data]
end
end
@output=tables_data
end
答案 0 :(得分:1)
如果您查看访问该页面时返回的实际HTML,您将看到该表实际上是空的,并且内容由JS动态加载。因此,只有nokogiri打开页面,你就无法做你想做的事。您需要使用允许您控制真实浏览器(或模拟具有JS支持的浏览器)的内容,以便在获取页面内容之前完全加载页面,或者您需要确定页面的URL正在加载表的数据并查看是否可以直接从那里访问它(可能无法实现)。