あなたの質問は、あなたが探しているものについて明確ではありません。
まず、<DT>
タグが正しく閉じられていないために HTML の形式が正しくなく、最初のa
タグのテキストに、UTF-8 ではないために Ruby 1.9.2 が好まない不正な文字があります。TextMate で文字をエンティティに変換しました。
html = %{
<DT>
<A HREF="http://mezzoblue.com/archives/2009/01/27/sprite_optim/" ADD_DATE="1233132422" PRIVATE="0" TAGS="irw_20">mezzoblue § Sprite Optimization</A>
<DT>
<A HREF="http://datamining.typepad.com/data_mining/2008/11/minority-report-interface.html" ADD_DATE="1226827542" PRIVATE="0" TAGS="irw_20">Minority Report Interface</A>
<DT>
<A HREF="http://www.windowshop.com/" ADD_DATE="1225267658" PRIVATE="0" TAGS="irw_20">Amazon Windowshop Beta</A>
<DD>Window shopping from Amazon
}
その HTML は、修正を試みた後、Nokogiri でこれに解析されます。
(rdb:1) print doc.to_html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<dt>
<a href="http://mezzoblue.com/archives/2009/01/27/sprite_optim/" add_date="1233132422" private="0" tags="irw_20">mezzoblue § Sprite Optimization</a>
<dt>
<a href="http://datamining.typepad.com/data_mining/2008/11/minority-report-interface.html" add_date="1226827542" private="0" tags="irw_20">Minority Report Interface</a>
<dt>
<a href="http://www.windowshop.com/" add_date="1225267658" private="0" tags="irw_20">Amazon Windowshop Beta</a>
</dt>
</dt>
</dt>
<dd>Window shopping from Amazon
</dd>
</body></html>
終了タグが onlyタグdt
の直前にグループ化されていることに注意してください。それは厄介ですが、コンテンツdd
を探す方法は変わらないので問題ありません。dd
doc = Nokogiri::HTML(html, nil, 'UTF-8')
comments = []
doc.css('dt + dd').each do |a|
comments << a.text
end
puts comments
# >> Window shopping from Amazon
つまり、find の<dt>
後に<dd>
. dt
その後をa
検索しない/できないdd
のは、HTML が解析する方法ではないためです。実際には がdt
続きます。dd
これが " dt + dd
" の意味です。
a
あなたの質問が読むことができるように見えた別の方法は、タグのコンテンツを探していたということでした:
comments = []
doc.css('a').each do |a|
comments << a.text
end
puts comments
# >> mezzoblue § Sprite Optimization
# >> Minority Report Interface
# >> Amazon Windowshop Beta