Зачистка для конкретного названия с использованием Nokogiri в Ruby - PullRequest
0 голосов
/ 07 сентября 2018

В настоящее время я занимаюсь поиском в Интернете с помощью веб-сайта NYT Best Sellers. Я хочу получить название книги № 1 в списке и найти элемент HTML:

<div class="book-body">
  <p class="freshness">12 weeks on the list</p>
  <h3 class="title" itemprop="name">CRAZY RICH ASIANS</h3>
  <p class="author" itemprop="author">by Kevin Kwan</p>
  <p itemprop="description" class="description">A New Yorker gets a surprise when she spends the summer with her boyfriend in Singapore.</p>
</div>

Я использую следующий код для захвата определенного текста:

doc.css(".title").text

Однако он возвращает названия каждой книги в списке. Как мне получить только конкретное название книги «CRAZY RICH ASIANS»?

1 Ответ

0 голосов
/ 07 сентября 2018

Если вы посмотрите на возврат от doc.css(".title"), вы увидите, что это коллекция всех названий. Как Nokogiri::XML::Element Объекты

Насколько мне известно, CSS не имеет селектора для нацеливания на первый элемент данного класса. (Кто-то может меня поправить, если я ошибаюсь), но получить только первый элемент из Nokogiri::XML::NodeSet все еще очень просто, поскольку во многих случаях он действует как Array. Например:

doc.css(".title")[0].text

Вы также можете использовать xpath для выбора только первого (поскольку XPath поддерживает выбор на основе индекса), например так:

doc.xpath(doc.xpath("(//h3[@class='title'])[1]").text

Обратите внимание:

  • Индексы Ruby начинаются с 0, как в первом примере;
  • Индексы XPath начинаются с 1, как во втором примере.
...