Ruby Mechanize помогает очистить экран

Я пытаюсь очистить строку в таблице с датой. Я хочу очистить только третью строку с сегодняшней датой.

Это мой механический код. Я пытаюсь выбрать строку столбца, в которой есть сегодняшняя дата, а также ее и ее столбцы:

agent.page.search("//td").map(&:text).map(&:strip)

Output:
"11-02-2011", "1", "1", "1", "1", "0", "0,00 DKK", "0,00", "0,00 DKK", 
"12-02-2011", "5", "5", "1", "4", "0", "0,00 DKK", "0,00", "0,00 DKK", 
"14-02-2011", "1", "3", "1", "1", "0", "0,00 DKK", ",00", "0,00 DKK",
"7", "9", "3", "6", "0", "0,00 DKK", "0,00", "0,00 DKK

"

Я хочу очистить только третью строку, которая является сегодняшней датой.


person Rails beginner    schedule 14.02.2011    source источник


Ответы (1)


Вместо того, чтобы перебирать теги <td> с помощью '//td', ищите теги <tr>, захватывайте только третий, затем зацикливайте на '//td'.

Mechanize использует Nokogiri для внутреннего использования, поэтому вот как это сделать на Nokogiri-ese:

html = <<EOT
<table>
<tr><td>11-02-2011</td><td>1</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0,00 DKK</td><td>0,00</td><td>0,00 DKK</td></tr>
<tr><td>12-02-2011</td><td>5</td><td>5</td><td>1</td><td>4</td><td>0</td><td>0,00 DKK</td><td>0,00</td><td>0,00 DKK</td></tr>
<tr><td>14-02-2011</td><td>1</td><td>3</td><td>1</td><td>1</td><td>0</td><td>0,00 DKK</td><td>,00</td><td>0,00 DKK</td></tr>
</table>
EOT

require 'nokogiri'
require 'pp'

doc = Nokogiri::HTML(html)

pp doc.search('//tr')[2].search('td').map{ |n| n.text }

>> ["14-02-2011", "1", "3", "1", "1", "0", "0,00 DKK", ",00", "0,00 DKK"]

Используйте .search('//tr')[2].search('td').map{ |n| n.text }, добавленный к agent.page Mechanize, например:

agent.page.search('//tr')[2].search('td').map{ |n| n.text }

Я давно не играл с Mechanize, так что это тоже может быть agent.page.parser....


РЕДАКТИРОВАТЬ:

в таблице появится больше строк. Строка, которую я хочу очистить, всегда является предпоследней.

Важно поместить эту информацию в исходный вопрос. Чем точнее ваш вопрос, тем точнее наши ответы.

person the Tin Man    schedule 14.02.2011
comment
Большое Вам спасибо. Проблема в том, что в таблице появится больше строк. Строка, которую я хочу очистить, всегда является предпоследней. - person Rails beginner; 15.02.2011
comment
Как мне захватить предпоследнюю строку :)? - person Rails beginner; 15.02.2011
comment
Нашли ответ :) agent.page.search('//tr')[-2].search('td').map{ |n| п.текст } - person Rails beginner; 15.02.2011
comment
@Rails для начинающих: agent.page.search('//tr')[-2].search('td').map{ |n| п.текст }. Ага. Очень хороший! - person the Tin Man; 15.02.2011