ruby nokogiri Соскоб HTML-таблицы с использованием xpath - PullRequest
3 голосов
/ 07 ноября 2011

Я пытаюсь получить значение "cell4", которое записано в таблице HTML, как показано ниже, используя ruby ​​xpath и nokogiri:

<html>
<body>

<h1>Heading</h1>

<p>paragraph.</p>

<h4>Two rows and three columns:</h4>
<table border="0">
<tr>
  <td>cell1</td>
  <td>cell2</td>
</tr>
<tr>
  <td>cell3</td>
  <td>cell4</td>
</tr>

</table>

</body>
</html>

У меня есть следующий простой код, но он приносит [].Этот вопрос должен быть достаточно простым, но он не может найти ничего, что попадает в точку в google

#!/usr/bin/ruby -w

require 'rubygems'
require 'nokogiri'

page1 = Nokogiri::HTML('test_simple.html')

a = page1.xpath("//html/body/table/tr[2]/td[2]")
p a

, xpath работает так, как задумано на REXML, поэтому он правильный, но не на nokogiri.Поскольку это будет использоваться для больших htmls, REXML не может быть использован.Кажется, проблема не только в таблицах, а только в другом содержимом тега

или не может быть также удалена.

Ответы [ 2 ]

7 голосов
/ 07 ноября 2011

ИМХО работать с CSS API в Nokogiri намного сложнее (XPath всегда вызывает у меня головную боль):

page.css('td') # should return an array of 4 table cell nodes
page.css('td')[3] # return the 4th 'td' node, counting starts at 0
4 голосов
/ 10 ноября 2011

благодаря комментарию Таро я смог решить проблему с небольшим усилием

Вот правильный код:

#!/usr/bin/ruby -w
require 'rubygems'
require 'nokogiri'
page1 = Nokogiri::HTML(open('test_simple.html'))
a = page1.xpath("/html/body/table/tr[2]/td[2]").text
p a
...