2009-08-07 72 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 2010-12-14 16:07:22

0

@weppos:這將是好一點

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

是的,但是這個假設他只想要p和div。我認爲他想要一切。 – Geo 2009-08-07 11:04:41

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 
相關問題