Я использую nokogiri для очистки веб-страниц. Структура страницы состоит из неупорядоченного списка, содержащего несколько элементов списка, каждый из которых имеет ссылку, изображение и текст, все они содержатся в div.
Я пытаюсь найти чистый способ извлечения элементов в каждом элементе списка, чтобы каждый li содержался в массиве или хэше следующим образом:
li[0] = ['Acme co 1', 'image1.png', 'Customer 1 details']
li[1] = ['Acme co 2', 'image2.png', 'Customer 2 details']
На данный момент я получаю все элементы за один раз, а затем сохраняю их в отдельных массивах. Есть ли лучший, более идиоматический способ сделать это?
Это код банкомата:
data = Nokogiri::HTML(html)
images = []
name = []
data.css('ul li img').each {|l| images << l}
data.css('ul li a').each {|a| names << a.text }
Это HTML, с которым я работаю:
<ul class="customers">
<li>
<div>
<a href='#' class="company-name"> Acme co 1 </a>
<div class="customer-image">
<img src="image1.png"/>
</div>
<div class=" customer-description">
Cusomter 1 details
</div>
</div>
</li>
<li>
<div>
<a href='#' class="company-name"> Acme co 2</a>
<div class="customer-image">
<img src="image1.png"/>
</div>
<div class=" customer-description">
Customer 2 details
</div>
</div>
</li>
</ul>
Благодарность
2 ответа
Предполагая, что код, который у вас есть, дает вам то, что вы хотите, я бы не стал переписывать что-либо существенное. Вы можете быть более кратким и идиоматичным, заменив свои методы #each
на #map
:
data = Nokogiri::HTML(html)
images = data.css('ul li img')
names = data.css('ul li a').map(&:text)
data = Nokogiri::HTML(html)
images = data.css('ul li img')
names = data.css('ul li a').map(&:text)
Это немного упрощает ваш код, но ваша исходная версия была не так уж плоха.
И мое упрощение не может быть обобщающим, если вы, например, собираете изображения из нескольких областей на странице! В этом случае можно будет вернуться к исходному состоянию.
Похожие вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].