带有CSS问题的Ruby Nokogiri HTML抓取表

带有CSS问题的Ruby Nokogiri HTML抓取表,html,css,ruby,web-scraping,nokogiri,Html,Css,Ruby,Web Scraping,Nokogiri,我有一个问题与一个html表刮。 以下是链接: 是的,这是一个著名的Ruby scraping入门教程。 以下是相关代码: doc = Nokogiri::HTML.parse(open(link)) # Get the biggest table big_table = doc.css("table").sort { |x,y| y.css("tr").count <=> x.css("tr").count }.first # Number of rows is 87, bu

我有一个问题与一个html表刮。 以下是链接: 是的,这是一个著名的Ruby scraping入门教程。 以下是相关代码:

doc = Nokogiri::HTML.parse(open(link))

# Get the biggest table 
big_table = doc.css("table").sort { |x,y| y.css("tr").count <=> x.css("tr").count }.first

# Number of rows is 87, but there are 5 heads that I wanna remove   
big_table.css("tr").count

# This doesn't remove heads 
big_table = big_table.select { |row| row.css("th").empty? }
事实上,在HTML中,我对HTML一无所知,我使用Ruby,因为4h th是header的标记,td是标准单元格的标记,tr只是一行。 目标是删除标题,以便在节点集节点集类似于标记的内容时返回.empty?如果为空,则最后一行代码应仅返回tr元素。 但它不起作用,事实上结果是[]。 相反,我注意到: 大表格。选择{| row | row.csstd.empty?}。计数等于5。。。 因此,我决定:

big|u table=big|u table.选择{| row | row.csstd.any?}它运行良好

我的问题是:这条线为什么有效?为什么第一次尝试失败了? 也许是HTML结构中我缺少的东西

谢谢

让我们看看大桌子

所以首先,对大_表执行Enumerableselect可能并没有达到您的预期。如果取而代之的是捕获行:

> rows = big_table.css("tr")
> rows.count
 => 87
现在您可以在行上进行选择。让我们选取任意一行,看看它包含什么:

> rows[2].css("td").count
 => 29

> rows[2].css("th").count
 => 1

因此,一个典型的行有29个td元素和第1个td元素。事实上,每行至少有一个th,这就是为什么cssth是空的?什么也没回来。相反,所有标题行都不包含任何td元素,这就是您尝试的方法有效的原因。

我不清楚:您希望从页面中提取什么?我正在尝试从第一个表中提取数据。这是我在9点20分到11点20分开始的教程视频。我完全复制了这家伙所做的,正如我提到的,row.csstd是空的吗?line没有完成任务。谢谢与您的问题无关,虽然查找最大的表很有趣,但我会使用max_by而不是sort,因为ID是唯一的,所以您只需要找到相应的ID,即big_table=doc.csspgl_basic。非常感谢您的解释!:现在清楚多了。顺便问一下,你知道一门以ruby,nokogiri语言开始的课程吗?我真的是从这两种语言开始的?再次感谢!:
> rows[2].css("td").count
 => 29

> rows[2].css("th").count
 => 1