2009-08-07 2 views
4

Я только начал изучать Рубин. Очень классный язык, ему это очень нравится.Hpricot, Получить весь текст из документа

Я использую очень удобный HTML-парсер Hpricot.

Что я ищу, это захватить весь текст со страницы, исключая 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, вам, возможно, придется удалить код яваскрипта перед сбором текста массива '(док/"скрипт"), каждый из {| 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 
Смежные вопросы