2010-11-18 11 views
20

En navegadores como Firefox o Safari, con un sitio web abierto, puedo hacer clic derecho en la página y seleccionar algo como: "Ver origen de página" o "Ver código fuente". Esto muestra la fuente HTML para la página.Cómo obtener el código HTML de una página web en Ruby

En Ruby, ¿hay alguna función (tal vez una biblioteca) que me permita almacenar esta fuente HTML como variable? Algo como esto:

source = view_source(http://stackoverflow.com) 

donde origen sería este texto:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title>Stack Overflow</title> 
etc 

Respuesta

27

Uso Net::HTTP:

require 'net/http' 

source = Net::HTTP.get('stackoverflow.com', '/index.html') 
2

usted podría utilizar la orden interna Net::HTTP:

>> require 'net/http' 
>> Net::HTTP.get 'stackoverflow.com', '/' 

O una de las varias bibliotecas sugeridas en "Equivalent of cURL for Ruby?".

6

Sí, como este:

require 'open-uri' 

open('http://stackoverflow.com') do |file| 
    #use the source Eric 
    #e.g. file.each_line { |line| puts line } 
end 
+1

+1 para usar la fuente: D – Doorknob

15
require 'open-uri' 
source = open(url){|f|f.read} 

UPD: sintaxis más moderna

require 'open-uri' 
source = open(url, &:read) 
+2

Aún más corto: 'source = open (url) .read' –

+2

@Mark Thomas, no cerrará la conexión. – Nakilon

+1

¿Ambos cerrarán la conexión? –

3

Otra cosa que podría estar interesado en es Nokogiri. Es un analizador HTML, XML, etc. que es muy fácil de usar. Su página principal tiene un código de ejemplo que debería comenzar y ver si es lo que necesita.

+1

Nokogiri no tiene nada que ver con la recuperación de una página, solo analiza la página una vez que ha sido recuperada por un cliente HTTP o leída desde un archivo. Es una distinción muy importante. –

+0

@theTinMan - De hecho, esto fue más informativo y tal vez debería haber sido publicado como un comentario en lugar de una respuesta. Mi suposición era que después de obtener el HTML, el OP querría hacer algo con él :-) –

+1

Esperamos que quieran hacer algo más con él, en lugar de obstruir una red y atascar una CPU. –

1

Si tiene cURL instalado, usted podría simplemente:

url = 'http://stackoverflow.com' 
html = `curl #{url}` 

Si desea utilizar Ruby puro, mirar el Net::HTTP biblioteca:

require 'net/http' 
stack = Net::HTTP.new 'stackoverflow.com' 
# ...later... 
page = '/questions/4217223/how-to-get-the-html-source-of-a-webpage-in-ruby' 
html = stack.get(page).body 
3
require 'mechanize' 

agent = Mechanize.new 
page = agent.get('http://google.com/') 

puts page.body 

a continuación, puede hacer una muchas otras cosas interesantes con mecanizar también.

13
require 'open-uri' 
source = open(url).read 

corto, simple, dulce.

+5

No se cerrará la conexión. – Nakilon

Cuestiones relacionadas