html - trafico - ¿Cuál es la mejor manera de analizar una página web en Ruby?
seo calificacion (6)
He estado buscando en las bibliotecas XML y HTML en rubyforge una forma simple de extraer datos de una página web. Por ejemplo, si quiero analizar una página de usuario en stackoverflow, ¿cómo puedo obtener los datos en un formato utilizable?
Supongamos que quiero analizar mi propia página de usuario para obtener mi puntaje de reputación actual y mi listado de placas. Intenté convertir la fuente recuperada de mi página de usuario en xml, pero la conversión falló debido a un div perdido. Sé que podría hacer una comparación de cuerdas y encontrar el texto que estoy buscando, pero tiene que haber una forma mucho mejor de hacerlo.
Quiero incorporar esto en una secuencia de comandos simple que escupe mis datos de usuario en la línea de comandos, y posiblemente lo expanda en una aplicación GUI.
Algo con lo que me encontré tratando de hacer esto antes es que pocas páginas web son documentos XML bien formados. Hpricot puede ser capaz de lidiar con eso (no lo he usado), pero cuando estaba haciendo un proyecto similar en el pasado (usando Python y las funciones de análisis integradas de la biblioteca) me ayudó a tener un pre-procesador para limpiar el HTML. Utilicé los enlaces de python para HTML Tidy como este y me hizo la vida mucho más fácil. Los enlaces de Ruby están aquí pero no los he probado.
¡Buena suerte!
Siempre me gustó lo que escribe Ilya Grigorik, y escribió una buena publicación sobre el uso de hpricot.
También leí esta publicación hace un tiempo y parece que sería útil para ti.
No lo he hecho yo mismo, por lo que YMMV, pero estos parecen bastante útiles.
Lamentablemente, reclama ser XML, pero en realidad no lo es. Sin embargo, Hpricot puede analizar esta sopa de etiquetas en un árbol de elementos para usted.
require ''hpricot''
require ''open-uri''
doc = Hpricot(open("http://.com/users/19990/armin-ronacher"))
reputation = (doc / "td.summaryinfo div.summarycount").text.gsub(/[^/d]+/, "").to_i
Etcétera.
prueba hpricot , está bien ... increíble
Lo he usado varias veces para raspar la pantalla.
parece ser un tema viejo, pero aquí hay uno nuevo. Ejemplo obteniendo reputación:
#!/usr/bin/env ruby
require ''rubygems''
require ''hpricot''
require ''open-uri''
user = "619673/100kg"
html = "http://.com/users/%s?tab=reputation"
page = html % user
puts page
doc = Hpricot(open(page))
pars = Array.new
doc.search("div[@class=''subheader user-full-tab-header'']/h1/span[@class=''count'']").text.each do |p|
pars << p
end
puts "reputation " + pars[0]
Usa Nokogiri ahora.