¿Cómo analizo una tabla HTML con Nokogiri?
ruby mechanize (1)
#!/usr/bin/ruby1.8
require ''nokogiri''
require ''pp''
html = <<-EOS
(The HTML from the question goes here)
EOS
doc = Nokogiri::HTML(html)
rows = doc.xpath(''//table/tbody[@id="threadbits_forum_251"]/tr'')
details = rows.collect do |row|
detail = {}
[
[:title, ''td[3]/div[1]/a/text()''],
[:name, ''td[3]/div[2]/span/a/text()''],
[:date, ''td[4]/text()''],
[:time, ''td[4]/span/text()''],
[:number, ''td[5]/a/text()''],
[:views, ''td[6]/text()''],
].each do |name, xpath|
detail[name] = row.at_xpath(xpath).to_s.strip
end
detail
end
pp details
# => [{:time=>"23:35",
# => :title=>"Vb4 Gold Released",
# => :number=>"24",
# => :date=>"06 Jan 2010",
# => :views=>"1,320",
# => :name=>"Paul M"}]
Instalé Ruby y Mechanize. Me parece que es posible en Nokogiri hacer lo que quiero hacer, pero no sé cómo hacerlo.
¿Qué hay de esta table
? Es solo parte del HTML de un sitio del foro vBulletin. Traté de mantener la estructura HTML, pero eliminé algunos atributos de texto y etiqueta. Quiero obtener algunos detalles por hilo como: Título, Autor, Fecha, Hora, Respuestas y Vistas.
Tenga en cuenta que hay pocas tablas en el documento HTML? Estoy detrás de una tabla en particular con su tbody
, <tbody id="threadbits_forum_251">
. El nombre será siempre el mismo (espero). ¿Puedo usar el tbody
y el name
en el código?
<table >
<tbody>
<tr> <!-- table header --> </tr>
</tbody>
<!-- show threads -->
<tbody id="threadbits_forum_251">
<tr>
<td></td>
<td></td>
<td>
<div>
<a href="showthread.php?t=230708" >Vb4 Gold Released</a>
</div>
<div>
<span><a>Paul M</a></span>
</div>
</td>
<td>
06 Jan 2010 <span class="time">23:35</span><br />
by <a href="member.php?find=lastposter&t=230708">shane943</a>
</div>
</td>
<td><a href="#">24</a></td>
<td>1,320</td>
</tr>
</tbody>
</table>