Очистка таблицы Ruby Mechanize не захватывает всю строку - PullRequest
5 голосов
/ 17 февраля 2011

Я пытаюсь почистить веб-сайт за столом с помощью mechanize.Я хочу очистить второй ряд.

Когда я бегу:

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

Я ожидаю, что это очистит весь ряд.Но вместо этого он только очищает: ["2011-02-17", "0,00"]

Почему он не очищает все столбцы в строке, а только первый и последний столбцы?

Xpath: / html / body / center / table / tbody / tr [2] / td [2] / table / tbody / tr [3] / td / table / tbody /tr [2] / td / table / tbody / tr [2]

ПУТЬ CSS: html таблица центра тела tbody таблица tbody таблица tbody таблица tbody tr td table.ea tbody trtd.total

Страница похожа на эту:

<table><table><table>
<table width="100%" border="0" cellpadding="0" cellspacing="1" class="ea">
<tr>
    <th><a href="#">Date</a></th>
    <th><a href="#">One</a></th>    
    <th><a href="#">Two</a></th>    
    <th><a href="#">Three</a></th>     
    <th><a href="#">Four</a></th>    
    <th><a href="#">Five</a></th>        
    <th><a href="#">Six</a></th>        
    <th><a href="#">Seven</a></th>      
    <th><a href="#">Eight</a></th>
</tr>
<tr>
    <td><a href="#">2011-02-17</a></td>
    <td align="right">0</td>    
    <td align="right">0</td>    
    <td align="right">0,00</td>     
    <td align="right">0</td>    
    <td align="right">0</td>        
    <td align="right">0</td>    
    <td align="right">0</td>        
    <td align="right">387</td>      
    <td align="right">0,00</td>     <!-- FOV -->
    <td align="right">0,00</td>
</tr>
<tr>
    <td class="total">Ialt</td>
    <td class="total" align="right">0</td>  
    <td class="total" align="right">40</td>     
    <td class="total" align="right">0,46</td>   
    <td class="total" align="right">2</td>      
    <td class="total" align="right">0</td>        
    <td class="total" align="right">0</td>      
    <td class="total" align="right">0</td>        
    <td class="total" align="right">3.060</td>      
    <td class="total" align="right">0,00</td>       
    <td class="total" align="right">18,58</td>
</tr>
</table>
</table></table></table>

Ответы [ 2 ]

5 голосов
/ 20 февраля 2011

Используя следующий код Ruby (https://gist.github.com/835603):

require 'mechanize'
require 'pp'

a = Mechanize.new { |agent|
  agent.user_agent_alias = 'Mac Safari'
}

a.get('http://binarymuse.net/table.html') do |page|
  pp page.search('table.ea').search('tr')[-2].search('td').map{ |n| n.text }
end

, я получаю следующий вывод:

["2011-02-17", "0", "0", "0,00", "0", "0", "0", "0", "387", "0,00", "0,00"]
0 голосов
/ 25 февраля 2011

Я бы порекомендовал вам покинуть Механизацию, чтобы сложнее, чем очистка страницы. Вы можете использовать Nokogiri гораздо проще, чем использовать Mechanize (но, конечно, вы можете сделать это с ним), поскольку вы можете просто запросить страницу.

Попробуйте!

здесь - ссылка на ответ относительно nokogiri

Лично я использовал Mechanize, когда мне нужно было отправлять формы и тому подобное хотя есть множество других применений!

...