захватить текст между всеми тегами в Nokogiri? - PullRequest
9 голосов
/ 03 октября 2009

Что было бы наиболее эффективным способом захвата всех текстов между HTML-тегами?

<div>
<a> hi </a>
....

куча текстов, окруженных HTML-тегами.

Ответы [ 4 ]

25 голосов
/ 03 октября 2009
doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").to_s
5 голосов
/ 10 октября 2009

Используйте синтаксический анализатор Sax. Гораздо быстрее, чем опция XPath.

require "nokogiri"

some_html = <<-HTML
<html>
  <head>
    <title>Title!</title>
  </head>
  <body>
    This is the body!
  </body>
</html>
HTML

class TextHandler < Nokogiri::XML::SAX::Document
  def initialize
    @chunks = []
  end

  attr_reader :chunks

  def cdata_block(string)
    characters(string)
  end

  def characters(string)
    @chunks << string.strip if string.strip != ""
  end
end
th = TextHandler.new
parser = Nokogiri::HTML::SAX::Parser.new(th)
parser.parse(some_html)
puts th.chunks.inspect
2 голосов
/ 07 января 2013

Просто сделай:

doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").text
1 голос
/ 14 октября 2009

Вот как получить весь текст в разделе вопросов этой страницы:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("/952013/zahvatit-tekst-mezhdu-vsemi-tegami-v-nokogiri"))
puts doc.css("#question").to_s
...