2010-11-18 11 views
20

Nel browser come Firefox o Safari, con un sito web aperto, posso fare clic destro della pagina e selezionare qualcosa come: "View Source" "Visualizza sorgente pagina" o Questo mostra l'origine HTML per la pagina.Come ottenere il sorgente HTML di una pagina web in Ruby

In Ruby, c'è una funzione (forse una biblioteca) che mi permette di memorizzare questa sorgente HTML come una variabile? Qualcosa di simile a questo:

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

cui fonte sarebbe questo testo:

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

risposta

27

Uso Net::HTTP:

require 'net/http' 

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

è possibile utilizzare la funzione interna Net::HTTP:

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

Oppure una delle numerose librerie suggerite in "Equivalent of cURL for Ruby?".

6

Sì, in questo modo:

require 'open-uri' 

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

+1 per utilizzare la fonte: D – Doorknob

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

UPD: sintassi più moderna

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

Ancora più breve: 'source = open (url) .read' –

+2

@ Mark Thomas, non chiude la connessione. – Nakilon

+1

Entrambi chiuderanno la connessione? –

3

Un'altra cosa che si potrebbe essere interessati a è Nokogiri. È un parser HTML, XML, ecc. Molto facile da usare. La loro prima pagina ha qualche codice di esempio che dovrebbe iniziare e vedere se è giusto per quello che ti serve.

+1

Nokogiri non ha nulla a che fare con il recupero di una pagina, ma analizza solo la pagina una volta che è stata recuperata da un client HTTP o letta da un file. È una distinzione molto importante. –

+0

@theTinMan - In effetti, questo era più informativo e forse avrebbe dovuto essere pubblicato come commento piuttosto che come risposta. La mia ipotesi era che dopo aver ottenuto l'HTML, l'OP avrebbe voluto fare qualcosa con questo :-) –

+1

Speriamo che vorrebbero fare qualcosa di più con esso, piuttosto che intasare una rete e impantanarsi una CPU. –

1

Se avete cURL installato, si può semplicemente:

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

Se si desidera utilizzare puro Ruby, guardare il Net::HTTP libreria:

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 

si può poi fare un molte altre cose interessanti con meccanizza pure.

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

breve, semplice, dolce.

+5

Non chiude la connessione. – Nakilon

Problemi correlati