11

这应该很容易,但我被卡住了。

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

例如,我想根据它的文本是“Link Text Next”这一事实来选择下一页链接。有任何想法吗?

4

3 回答 3

16

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

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

参考:XPath 上的文档包含函数


PS。您的文本Link Text Next末尾有一个空格。为避免在代码中包含该空格:

text()="Link Text Next "

我认为 usingcontains更笼统,但仍然足够具体。

于 2012-08-27T15:44:17.407 回答
6

您可以使用以下 XPath 表达式:

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

这将选择href带有 text 的链接的属性"Link Text Next"

如果您需要更多控制,请参阅XPath 字符串函数。

于 2012-08-27T15:46:15.673 回答
1

您的 xpath 选择的是 href 而不是a标签中的文本。从您的示例中看,它不像 href 那样包含next在其中,因此您无法使用 RE 找到它。

于 2012-08-27T15:43:32.503 回答