2016-08-29 8 views
0

Webからコンテンツを取得(スクレイプ)するためにnokogiri libに苦労していましたが、ネストされたタグなしのテキストのみを取得する方法を理解できませんでした。ここ は、私がここでnokogiri特定のHTML構造のテキストのみを取得する

<div class="line1">text I need 
<br><div class="podp_k">group:</div><a class="GR" title="go to this group" href="#" rel="?sectID=2">group 1</a> 
<br> 
<div class="podp_k">brand:</div><a class="BR" title="go to brand" href="#" rel="?sectID=0&amp;brand=16">China&nbsp;&nbsp;CHINA</a> 
</div> 

を解析するものである私が最後に

tagcloud_elements = nokogiri_object.css("div#products_tbody > table > tbody > tr > td > div.line1 > text()") 
f.puts tagcloud_element.text.gsub(/^\s+/,'') 

GSUBそれをこすり方法は、ほぼ正確に私は必要ないが、私は後に空白の数をレフトています。誰かが上記の例から「必要なテキスト」だけを得る最良の方法を提案することはできますか?

+0

"[mcve]"をお読みください。期待される成果は?あなたが長いセレクタのリストを持っているときはいつでも、コードをより壊れやすくしています。 HTMLが変更された場合、セレクタは非常に破損する可能性があります。代わりに、あなたが直接必要とする正確なタグを見つけることができない場合は、HTML内のプレースホルダを見つけてそれらにナビゲートし、次にあなたが望むものを得るまで次へジャンプします。結果として得られるコードは、より弾力的になります。 –

+0

'' div#products_tbody> table> tbody> tr> td> div.line1> text() "'のように、あなたの送り先に介在するすべてのタグを定義する長いセレクタを使用することには十分注意してください。 HTMLが変更された場合、コードは破損します。代わりに、 'div#products_tbody div.line1'のような単純なセレクタに基づいて検索してください。そうすればテーブルが消えてしまい、コンテンツが 'div.line1'の中に残っていれば見つけることができます。 –

答えて

1

これ以上ドキュメントを使用していない場合は、このセクションにある他のノードを削除します。

nokogiri_object.css("div.line1 *").each(&:remove) 
nokogiri_object.at_css("div.line1").text.strip # => "text I need" 
+0

実際には「必要なテキスト」も削除されます。 – Evgeny

関連する問題