2009-12-06 14 views
10

Deseo obtener el contenido de esta * página. Todo lo que he buscado brinda la solución de analizar elementos CSS; pero, esa página no tiene ninguna.Obtener contenido de la página web con Ruby - Tengo problemas

Aquí es el único código que encontré que parecía que debería funcionar:

file = File.open('http://hiscore.runescape.com/index_lite.ws?player=zezima', "r") 
contents = file.read 
puts contents 

error:

tracker.rb:1:in 'initialize': Invalid argument - http://hiscore.runescape.com/index_lite.ws?player=zezima (Errno::EINVAL) 
    from tracker.rb:1:in 'open' 
    from tracker.rb:1 

* http://hiscore.runescape.com/index_lite.ws?player=zezima

Si intenta dar formato a esto como un eslabón de la publicación no reconoce el guión bajo (_) en la URL por algún motivo.

Respuesta

36

Usted realmente desea utilizar open() proporcionada por la clase núcleo que puede leer de URIs sólo tiene que requerir la biblioteca OpenURI primera:

require 'open-uri' 

Usado como lo siguiente:

require 'open-uri' 
file = open('http://hiscore.runescape.com/index_lite.ws?player=zezima') 
contents = file.read 
puts contents 

Este hilo SO relacionado cubre t él mismo pregunta:

Open an IO stream from a local file or url

+0

Veo - no sabía eso. Aún así, dependiendo de lo que él quiera hacer con ese contenido, podría estar mejor con net/http. – halfdan

+0

Oo, eso es aún mejor. Gracias. – Andrew

+0

@halfdan: estoy totalmente de acuerdo en que net/http es mejor en general. No confío en este método para nada que no sea trivial/producción. net/http tiene sus deficiencias y, en general, prefiero los enlaces curl (bordillo de lib). Esta publicación tiene buena información sobre el rendimiento del cliente http: http://bit.ly/lvriR encintado es genial porque tiene un control mucho más detallado sobre los tiempos de espera, que es muy crítico en el uso de producción de alto volumen. –

6

La manera apropiada a buscar el contenido de un sitio web es a través de la RED :: HTTP módulo en Rubí:

require 'uri' 
require 'net/http' 
url = "http://hiscore.runescape.com/index_lite.ws?player=zezima" 
r = Net::HTTP.get_response(URI.parse(url).host, URI.parse(url).path) 

File.open() no soporta URI.

mejores deseos,
Fabian

+0

Gawr, la gente Stackoverflow son las más frías. ¡Gracias! – Andrew

+0

¿No es esta la respuesta correcta entonces? –

6

Utilice-uri abierta, su apoyo tanto URI y los archivos locales

require 'open-uri' 
contents = open('http://www.google.com') {|f| f.read } 
Cuestiones relacionadas