2009-08-07 10 views
4

Rubyの学習を始めました。非常にクールな言語、それはたくさん好きです。Hpricot、ドキュメントからすべてのテキストを取得

私は非常に便利なHpricot HTMLパーサーを使用しています。

私が探しているのは、HTMLタグを除いて、ページのすべてのテキストを取得することです。

例:

「これは私もしたい私がつかむしたいものです。

<!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> 

私は基本的に私はそうのような文字列で終わるテキストのみをつかむしたいのですこのテキストを手に入れてください "

これを行うにはどのような方法が最適でしょうか?

乾杯

EEF

答えて

10

あなたは、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") 

しかし、これはかなり高価な操作です。より良い解決法が利用可能かもしれません。

+0

@Eef、あなたはそれぞれ{テキスト配列 '(DOC/"スクリプト")を収集する前にjavascriptのコードを削除する必要があるかもしれません| JS |。 js.inner_html = ''} '。 – Andrei

0

@weppos:これは少し良くなります。

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

ええ、これは彼がpとdivだけを望んでいると仮定します。私は彼がすべてを望んでいると思う。 – Geo

2

あなたはinner_textをしようとする場合があります。このよう

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 
関連する問題