12
votes

Obtenir le contenu de la page Web avec Ruby - j'ai des problèmes

Je veux obtenir le contenu de cette page *. Tout ce que j'ai recherché donne la solution d'analyse des éléments CSS; Mais, cette page n'en a aucun.

Voici le seul code que j'ai trouvé qui ressemblait à cela devrait fonctionner: p> xxx pré>

erreur: p>

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


0 commentaires

3 Réponses :


7
votes

Le moyen approprié d'aller chercher le contenu d'un site Web est via le module Net :: HTTP de Ruby:

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)


0 commentaires

41
votes

Vous voulez vraiment utiliser OUVERT () fourni par la classe de noyau que peut lire fort> de URIS, il vous suffit de demander à la bibliothèque openuri:

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


6 commentaires

Je vois - je ne savais pas ça. Néanmoins, en fonction de ce qu'il veut faire avec ce contenu, il pourrait être mieux désactivé avec net / http.


Oo, c'est encore mieux. Merci.


@HALFDAN - Totalement d'accord que Net / HTTP est meilleur en général. Je ne comptrai pas sur cette méthode pour quelque chose de non-trivial / de production. NET / HTTP a ses lacunes et je préfère généralement les liaisons de curl (Liburb). Cet article a de bonnes informations sur les performances du client HTTP - bit.ly/lvrir curb est génial parce que vous avez beaucoup plus fin. Contrôle grainé sur les délais d'attente, qui est super critique dans l'utilisation de la production de volume élevé.


Avons-nous besoin d'utiliser cette syntaxe "Source = Ouvrir (' Google.com ', &: lisez)" si Nous voulons que le fichier soit fermé? Quelqu'un ailleurs sur ce que ledit fichier.read seul ne ferme pas le fichier? Veuillez peser sur notre question si cela ne vous dérange pas: Stackoverflow.com/Questtions/21270239/... .


Vous n'êtes pas obligé d'utiliser cette syntaxe mais vous pouvez, sauvera la 2ème ligne de devoir faire la lecture. C'est vraiment la même chose que le 2e argument ne fait que passer un bloc à l'appel Open () et le bloc exécute après la réussite ouverte, exécutez ainsi le bloc (le lisez ) et renvoie ce résultat. 6 ou 1/2 une douzaine


@Codycaughlan et comment alliez-vous sur la mise à jour des chemins d'actifs dans HTML tiré de sorte que HTML tiré des affichages HTML car si je navigue directement sur cette URL dans le navigateur?



6
votes

Veuillez utiliser Open-UriR, son support URI et des fichiers locaux

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


0 commentaires