Puede utilizar Ruby a recortar un gran conjunto de resultados a artículos específicos:
page.css('div.one')[1,2] # Two items starting at index 1 (2nd item)
page.css('div.one')[1..2] # Items with indices between 1 and 2, inclusive
Debido Rubí indexación comienza en cero se debe tener cuidado con los elementos que desea.
Como alternativa, puede utilizar los selectores CSS para encontrar el nth item:
# Second and third items from the set, jQuery-style
page.css('div.one:eq(2),div.one:eq(3)')
# Second and third children, CSS3-style
page.css('div.one:nth-child(2),div.one:nth-child(3)')
O puede utilizar XPath para obtener partidos de vuelta específicos:
# Second and third children
page.xpath("//div[@class='one'][position()=2 or position()=3]")
# Second and third items in the result set
page.xpath("(//div[@class='one'])[position()=2 or position()=3]")
Tanto con las alternativas CSS y XPath en cuenta que :
- Numeración comienza en 1, no 0
En su lugar, puede usar at_css
y at_xpath
para recuperar el primer elemento coincidente, en lugar de un NodeSet.
# A NodeSet with a single element in it:
page.css('div.one:eq(2)')
# The second div element
page.at_css('div.one:eq(2)')
Por último, tenga en cuenta que si va a seleccionar un solo elemento por el índice con XPath, se puede utilizar un formato más corto:
# First div.one seen that is the second child of its parent
page.at_xpath('//div[@class="one"][2]')
# Second div.one in the entire document
page.at_xpath('(//div[@class="one"])[2]')
Originalmente esta respuesta tuvo la CSS 'div # one' . Eso encuentra un div con un * id * de 'uno', pero el HTML tiene * clases * de' uno'. Es por eso que hice el CSS 'div.one'. '#' selecciona una ID, '.' selecciona una clase. –