Ваш вопрос не ясен о том, что вы ищете.
Во-первых, HTML-код искажен, потому что теги <DT>
закрыты неправильно, и в тексте первого тега a
есть недопустимый символ, который не нравится Ruby 1.9.2, потому что это не UTF-8. Я преобразовал символ в сущность в 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>
Обратите внимание, как закрывающие теги 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
Это значит, найти <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