2012-08-27 20 views
8

Esto debería ser fácil pero estoy atascado.Scrapy - Seleccione un enlace específico basado en el texto

<div class="paginationControl"> 
    <a href="/en/overview/0-All_manufactures/0-All_models.html?page=2&amp;powerunit=2">Link Text 2</a> | 
    <a href="/en/overview/0-All_manufactures/0-All_models.html?page=3&amp;powerunit=2">Link Text 3</a> | 
    <a href="/en/overview/0-All_manufactures/0-All_models.html?page=4&amp;powerunit=2">Link Text 4</a> | 
    <a href="/en/overview/0-All_manufactures/0-All_models.html?page=5&amp;powerunit=2">Link Text 5</a> | 

<!-- Next page link --> 
    <a href="/en/overview/0-All_manufactures/0-All_models.html?page=2&amp;powerunit=2">Link Text Next ></a> 
</div> 

Estoy intentando utilizar Scrapy (Basespider) para seleccionar un enlace basado en él link text usando:

nextPage = HtmlXPathSelector(response).select("//div[@class='paginationControl']/a/@href").re("(.+)*?Next") 

Por ejemplo, quiero seleccionar el siguiente vínculo basado en el hecho que su texto es "Enlace de texto a continuación". ¿Algunas ideas?

Respuesta

14

Uso a[contains(text(),'Link Text Next')]:

nextPage = HtmlXPathSelector(response).select(
    "//div[@class='paginationControl']/a[contains(text(),'Link Text Next')]/@href") 

Referencia: Documentación sobre el XPath contains función


PS. Su texto Link Text Next tiene un espacio al final. Para evitar tener que incluir ese espacio en el código:

text()="Link Text Next " 

Creo usando contains es un poco más general sin dejar de ser lo suficientemente específico.

+0

Gracias chicos. Usé la sugerencia de @unutbu y funcionó perfectamente. –

+0

Entonces, ¿no hay una forma de selector CSS para hacer esto? – deostroll

1

Su xpath selecciona el href no el texto en la etiqueta a. No se ve en su ejemplo como href tiene next en él, por lo que no puede encontrarlo con un RE.

4

Usted puede usar la siguiente expresión XPath:

//div[@class='paginationControl']/a[text()="Link Text Next"]/@href 

Esto selecciona el href atributos del enlace con el texto "Link Text Next".

Consulte XPath string functions si necesita más control.

Cuestiones relacionadas