我有一个问题,一个HTML表格的刮。 这里是链接: https://www.basketball-reference.com/players/c/curryst01/gamelog/2016 (是的,这是一个着名的Ruby拼写教程)。 下面是相关的代码:红宝石Nokogiri与CSS问题的HTML抓取表
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)个是标题标签,TD是一个标准单元,和TR只是一条线。 目标是删除标头,如.empty
返回,如果一个nodeset(节点集像是一个标签的内容?)是空的,这最后一行代码应该只返回tr元素。 但它不起作用,实际上结果是[]。
相反,我注意到: big_table.select{|row| row.css("td").empty?}.count
等于5 ... 所以,我决定做:
big_table = big_table.select{|row| row.css("td").any?}
,效果不错...
我的问题是:为什么这条线工作?为什么第一次尝试失败? 也许这是在HTML结构中,我错过了...
谢谢!
我不清楚:你想从页面中提取什么? –
我试图从第一个表中提取数据。这里是教程视频,我正在关注https://www.youtube.com/watch?v=1UYBAn69Qrk&t=560s(从9分20秒开始直到11分20秒)。我完全抄袭了这个人做了什么,并且正如我提到“row.css(td)为空?”线没有做这项工作。谢谢 ! – Eliot
与你的问题无关,寻找最大的表是有趣的(我会使用'max_by'而不是'sort'),你真的只需要找到合适的ID,因为ID是唯一的,即'big_table = doc.css ( “#pgl_basic”)'。 –