2011-05-20 3 views

Répondre

6

ouvert URI étend open, de sorte que vous aurez un type de flux IO retourné:

open('http://www.example.com') #=> #<StringIO:0x00000100977420> 

Vous devez lire que pour obtenir le contenu:

open('http://www.example.com').read[0 .. 10] #=> "<!DOCTYPE h" 

Un grand nombre de fois une méthode vous permettra de passer différents types en tant que paramètre. Ils vérifient pour voir de quoi il s'agit et utilisent directement le contenu, dans le cas d'une chaîne, ou lisent la poignée s'il s'agit d'un flux.

HTML et XML, tels que les flux RSS, nous passons généralement la poignée à un analyseur et laissez-il saisir le contenu, l'analyse syntaxique, et retourner un objet approprié pour la recherche de plus:

require 'nokogiri' 
doc = Nokogiri::HTML(open('http://www.example.com')) 
doc.class #=> Nokogiri::HTML::Document 
doc.to_html[0 .. 10] #=> "<!DOCTYPE h" 
doc.at('h1').text #=> "Example Domains" 
+0

Bien que cela soit vrai, Open-URI remplace le Noyau Kernel #, qui est généralement utilisé pour les fichiers. Si elle n'est pas utilisée ** très ** avec prudence lorsqu'elle est combinée à une entrée de l'utilisateur, cela peut conduire les attaquants à lire le contenu de votre système de fichiers. 'open (params [: uri])', 'localhost: 3000 /? uri =/etc/passwd' et ainsi de suite. Ajouté à cette réponse très ancienne, car il apparaît encore très haut dans les résultats de recherche :) – haslo

6
doc = open("http://etc..") 
content = doc.read 

Plus souvent, les gens veulent être en mesure d'analyser le document renvoyé, pour cette utilisation quelque chose comme hpricot ou nokogiri

4

Je ne suis pas sûr si vous voulez le faire vous-même pour le diable ou pas, mais si vous ne le faites pas .. Mecanize est un très bon petit bijou pour le faire.

Il visitera la page que vous souhaitez et envelopper automatiquement la page avec nokogiri afin que vous puissiez accéder à ses éléments avec sélecteurs CSS tels que « en-tête div # h1 ». Ryan Bates a un video tutorial dessus qui vous apprendra tout ce que vous devez savoir pour l'utiliser.

Fondamentalement, vous pouvez juste

require 'rubygems' 
require 'mechanize' 

agent = Mechanize.new 
agent.get("http://www.google.com") 
agent.page.at("some css selector").text 

Il est aussi simple que cela.

Questions connexes