如何使用Nokogiri选择表格行



我很难从Nokogiri的"诺贝尔奖获得者名单"中抓取行。

我相信我的CSS选择器是正确的,但它返回为空。

最初的教程是"编写Web爬网程序"。

require 'rubygems'
require 'nokogiri'
require 'open-uri'
BASE_WIKIPEDIA_URL = 'http://en.wikipedia.org/'
LIST_URL = "#{BASE_WIKIPEDIA_URL}/wiki/List_of_Nobel_laureates"
page = Nokogiri::HTML(open(LIST_URL))
rows = page.css('div#content.mw-body div#bodyContent div#mw-content-text.mw-content-ltr table.wikitable.sortable.jquery-tablesorter tr')
puts "length : #{rows.size}"

有两个问题:

  1. 你正在构建的URL中有一个双斜杠,所以你实际上并不是在看你认为要看的页面。这就是你正在使用的URL:http://en.wikipedia.org//wiki/List_of_Nobel_laureates,如果你点击链接,你会看到它重定向到维基百科主页。

  2. 您的CSS选择器太具体了,并且包含了一些原始页面源中不存在的信息。你应该尝试一个更简单的选择器:

    rows = page.css('table.wikitable tr')
    

    具体来说,您将在选择器中包含jquery-tablesorter类。这个类是由JavaScript添加的,但你使用的工具不会执行页面的JavaScript,所以这个类不会出现,你也不能用它来查找表行。

    若您使用"查看源代码",而不是浏览器的DOM检查器工具,您将看到未应用任何JavaScript的原始源代码。

我可以看到,您期望使用类jquery tablesorter的表。这是因为你在浏览器中检查表,它有那个类。问题是jquery在页面加载之后添加了那个类。但是由于open-uri不处理javascript,所以这个类永远不会被添加到nokogiri看到的表中。

长话短说,你可能只想去:

page.css('table.wikitable tr')

相关内容

  • 没有找到相关文章

最新更新