2012-08-27 8 views
8

Questo dovrebbe essere facile ma sono bloccato.Scrapy - Seleziona il link specifico in base al testo

<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> 

Sto cercando di utilizzare Scrapy (Basespider) per selezionare un collegamento basato su di esso del testo Link mediante:

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

Per esempio, voglio selezionare il link alla pagina successiva sulla base del fatto che il testo è "Link Text Next". Qualche idea?

risposta

14

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

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

Riferimento: documentazione sul XPath contains funzione


PS. Il tuo testo Link Text Next ha uno spazio alla fine. Per evitare di dover includere quello spazio nel codice:

text()="Link Text Next " 

penso utilizzando contains è un po 'più generale, pur essendo abbastanza specifico.

+0

Grazie ragazzi. Ho usato il suggerimento di @unutbu e ha funzionato perfettamente. –

+0

Quindi non esiste un modo di selezione CSS per farlo? – deostroll

1

Il tuo xpath sta selezionando href e non il testo nel tag a. Non sembra dal tuo esempio come l'href ha next al suo interno, quindi non puoi trovarlo con un RE.

4

È possibile utilizzare la seguente espressione XPath:

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

Seleziona il href attributi del legame con il testo "Link Text Next".

Vedere XPath string functions se è necessario maggiore controllo.

Problemi correlati