Я делаю рубиновый веб-скребок для сбора информации. В HTML страницы, которую я хочу, чтобы скоблить, есть 3 равные пролеты в статье:Ruby - Скребковые конкатенатные строки
<article>
<div class="item item_contains_branding" data-adid="1234567">
<div class="clearfix" style="display: block;">
<div class="item-multimedia ">
...
</div>
<div class="item-info-container">
<div class="logo-branding">
...
</div>
<a href="/link/1" class="item-link " title="title 1" data-xiti-click="listado::enlace">title 1</a>
<div class="row price-row clearfix"> <span class="item-price">200<span>€</span></span> </div>
<span class="item-detail">T2 <small></small></span> <span class="item-detail">20 <small>m²</small></span> <span class="item-detail"> <small> more details 1</small></span>
<p class="item-description">description...</p>
<div class="item-toolbar clearfix">
...
</div>
</div>
</div>
</div>
</article>
<article>
<div class="item item_contains_branding" data-adid="1234567">
<div class="clearfix" style="display: block;">
<div class="item-multimedia ">
...
</div>
<div class="item-info-container">
<div class="logo-branding">
...
</div>
<a href="/link/2" class="item-link " title="title 2" data-xiti-click="listado::enlace">title 2</a>
<div class="row price-row clearfix"> <span class="item-price">300<span>€</span></span> </div>
<span class="item-detail">T5 <small></small></span> <span class="item-detail">50 <small>m²</small></span>
<p class="item-description">description...</p>
<div class="item-toolbar clearfix">
...
</div>
</div>
</div>
</div>
</article>
<article>
<div class="item item_contains_branding" data-adid="1234567">
<div class="clearfix" style="display: block;">
<div class="item-multimedia ">
...
</div>
<div class="item-info-container">
<div class="logo-branding">
...
</div>
<a href="/link/3" class="item-link " title="title 3" data-xiti-click="listado::enlace">title 3</a>
<div class="row price-row clearfix"> <span class="item-price">500<span>€</span></span> </div>
<span class="item-detail">T1 <small></small></span> <span class="item-detail">100 <small>m²</small></span> <span class="item-detail"> <small> more details 3</small></span>
<p class="item-description">description...</p>
<div class="item-toolbar clearfix">
...
</div>
</div>
</div>
</div>
</article>
Однако, некоторые из статей не имеют последний срок (с «более подробно»)
в настоящее время я использую этот код:
#first loop to find the title
page.css('a.item-link').each do |line|
puts line.text
end
#Second loop to find the price
page.css('span.item-price').each do |line|
puts line.text
end
#third loop to find the details
page.css('span.item-detail').each do |line|
line.text
end
Я использую камень Nokogiri и открытым URI для извлечения и анализа файла.
Как я могу объединить 3 пролета (некоторые статьи имеют только два пролета в классе «item-detail») и печатать их на экране?
Мой желаемый результат:
title 1
title 2
title 3
200€
300€
500€
T2
T5
T1
20 m²
50 m²
100 m²
more details 1
" "
more details 3
Некоторые из статей не имеют третий срок (с «подробнее п»), так что если это так, я напечатает «». Моя цель - записать результаты в CSV-файл.
Пожалуйста редактировать свой вопрос, чтобы включить ваш желаемый результат. –
Возможно, посмотрите на 'reduce' – Michael
ОК, я вижу, что вопрос изменился, и ожидается, что выход будет выполнен. Ожидаемый результат не коррелирует с входным HTML вообще. В примере нет названия, цены или деталей, так что буквально нет способа удовлетворительно ответить на вопрос. Укажите подходящий (реалистичный) ввод и примеры того, какие части ввода вы ожидаете согласовать с какими частями вывода. Как я уже сказал, вопрос не в том, что он не отвечает. –