Mechanize で解析された HTML ドキュメント内のテキストの各ランを抽出する賢明な方法はありますか? (たとえば):
<p>Here is <b>some</b> text<p>
次の 3 つの要素に分けられます。
Here is
some
text
? 私の直感では、再帰的な CSS 検索や #flatten を使用した簡単な手法があると思いますが、まだわかりません。
Mechanize で解析された HTML ドキュメント内のテキストの各ランを抽出する賢明な方法はありますか? (たとえば):
<p>Here is <b>some</b> text<p>
次の 3 つの要素に分けられます。
Here is
some
text
? 私の直感では、再帰的な CSS 検索や #flatten を使用した簡単な手法があると思いますが、まだわかりません。
「 Nokogiri recurively get all children 」の回答から借用:
result = []
doc.traverse { |node| result << node.text if node.text? }
それはあなたに配列を与えるはずです["Here is ", "some", " text"]
。
『ノコギリ に 襲われる』 で 議論traverse
。
各テキスト ノードのコンテンツが必要なので、次のようにします。
doc.search('//text()').map(&:text)
これ(および他の答え)の唯一の欠点は、要素間の空白もすべて取得することです。これを抑制したい場合は、次のようにします。
doc.search('//text()').map(&:text).delete_if{|x| x !~ /\w/}
これにより、単語文字を含まないすべての要素が削除されます。