Html Hpricot,从文档中获取所有文本

Html Hpricot,从文档中获取所有文本,html,ruby,hpricot,Html,Ruby,Hpricot,我刚刚开始学习Ruby。非常酷的语言,非常喜欢 我正在使用非常方便的Hpricot HTML解析器 我要做的是从页面中抓取所有文本,不包括HTML标记 例如: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Data Protection Checks</title> <

我刚刚开始学习Ruby。非常酷的语言,非常喜欢

我正在使用非常方便的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

您可以使用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")

然而,这是一个相当昂贵的操作。可能会有更好的解决方案。

@weppos:这样会更好一些:

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

您可能需要尝试内部文本

像这样:

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
h=Hpricot(“isawesome”)
将h.inner_放入文本
http://yoursite.com 太棒了

是的,但这假设他只想要p和div。我想他想要所有东西。@Eef,你可能需要在收集文本数组
(doc/“script”)之前删除javascript代码。每个{js | js.inner_html='''}