С Nokogiri вы можете просто попросить text
узла. Проблема, которую я вижу при этом, заключается в том, что все пробельные символы и символы новой строки, которые находятся в этом узле, будут возвращены, поэтому вы можете удалить их (вероятно, лучший способ сделать это, чем то, что я сделал для этого примера).
Вот образец:
def test_nokogiri_text
value = Nokogiri::HTML.parse(<<-HTML_END)
"<h1>
Hello<span class='punctuation'>,</span>
<span class='noun'>World<span class='punctuation'>!</span>
</h1>"
HTML_END
h1_node = value.search("h1").first
assert_equal("Hello, World!", h1_node.text.split(/\s+/).join(' ').strip)
end