Hpricot, получить весь текст из документа - PullRequest
4 голосов
/ 07 августа 2009

Я только начал изучать Ruby. Очень классный язык, он мне очень нравится.

Я использую очень удобный 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

Ответы [ 3 ]

10 голосов
/ 07 августа 2009

Это можно сделать с помощью селектора 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")

Однако это довольно дорогая операция. Лучшее решение может быть доступно.

2 голосов
/ 31 октября 2011

Возможно, вы захотите попробовать 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
0 голосов
/ 07 августа 2009

@ weppos: Это будет немного лучше:

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