在Ruby中使用Nokogiri搜寻特定标题

时间:2018-09-07 19:58:28

标签: html ruby web-scraping nokogiri screen-scraping

我目前正在使用NYT畅销书网站练习网页抓取。我想获得清单上第一本书的书名,并找到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 :(得分:1)

如果您查看来自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开始。