Scrapy - 选择基于文本的特定链接(Scrapy - Select specific lin

2019-07-31 05:24发布

这应该是容易的,但我坚持。

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

例如,我想基于这样的事实,它的文字是“链接文本下一步”,选择下一个页面的链接。 有任何想法吗?

Answer 1:

使用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 "

我认为使用contains有点更一般的,同时仍然不够具体。



Answer 2:

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

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

这将选择href文本链接的属性"Link Text Next"

见XPath字符串函数 ,如果你需要更多的控制。



Answer 3:

您的XPath是选择在href不是在文本a标签。 它不会从你的例子看起来像HREF有next的,所以你不能用一个RE找到它。



文章来源: Scrapy - Select specific link based on text