2009-08-07 9 views
4

Je viens de commencer à apprendre Ruby. Language très cool, l'aimer beaucoup. J'utilise l'analyseur HTML Hpricot très pratique.Hpricot, Obtenez tout le texte du document

Ce que je cherche à faire est de récupérer tout le texte de la page, à l'exclusion des balises HTML.

Exemple:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
     <title>Data Protection Checks</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
     <div> 
     This is what I want to grab. 
     </div> 
     <p> 
     I also want to grab this text 
     </p> 
    </body> 
</html> 

Je suis désireux essentiellement de saisir que le texte que je finis donc avec une chaîne comme ceci:.

« Voilà ce que je veux saisir Je veux aussi prenez ce texte "

Quelle serait la meilleure méthode pour cela?

Vive

Eef

Répondre

10

Vous pouvez le faire en utilisant le sélecteur XPath text().

require 'hpricot' 
require 'open-uri' 

doc = open("http://stackoverflow.com/") { |f| Hpricot(f) } 
text = (doc/"//*/text()") # array of text values 
puts text.join("\n") 

Cependant, ceci est une opération assez coûteuse. Une meilleure solution pourrait être disponible.

+0

@Eef, vous devrez peut-être supprimer le code javascript avant de recueillir le tableau de texte '(doc/"script") chaque {| js |. js.inner_html = ''} '. – Andrei

0

@weppos: Ce sera peu mieux:

text = doc/"//p|div/text()" # array of text values 
+1

ouais, mais cela suppose qu'il ne veut que p et div. Je pense qu'il veut tout. – Geo

2

Vous pourriez vouloir essayer inner_text.

Comme ceci:

h = Hpricot("<html><body><a href='http://yoursite.com?utm=trackmeplease'>http://yoursite.com</a> is <strong>awesome</strong>") 
puts h.inner_text 
http://yoursite.com is awesome 
Questions connexes