2012-08-27 32 views
8

這應該很容易,但我卡住了。Scrapy - 根據文字選擇具體的鏈接

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

我試圖使用Scrapy(Basespider)選擇基於它的鏈接是一個使用鏈接文字:

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

例如,我想基於這樣的事實,選擇下一個頁面鏈接它的文本是「鏈接文本下一頁」。有任何想法嗎?

回答

14

使用a[contains(text(),'Link Text Next')]

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

參考:在XPath的contains功能


PS文檔。您的文字Link Text Next最後有一個空格。爲了避免以包括代碼空間:

text()="Link Text Next " 

我想用contains是一個比較一般的,同時仍然不夠具體。

+0

謝謝你們。我使用了@unutbu的建議,它工作得很完美。 –

+0

所以沒有CSS選擇器的方式來做到這一點? – deostroll

1

您的xpath將選擇href而不是a標記中的文本。它不像你的例子那樣看起來像是href有next,所以你不能用RE找到它。

4

您可以使用下面的XPath表達式:

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

此選擇鏈接的href屬性文字"Link Text Next"

請參閱XPath string functions如果您需要更多控制。

相關問題