这应该很容易,但我被卡住了。
<div class="paginationControl">
<a href="/en/overview/0-All_manufactures/0-All_models.html?page=2&powerunit=2">Link Text 2</a> |
<a href="/en/overview/0-All_manufactures/0-All_models.html?page=3&powerunit=2">Link Text 3</a> |
<a href="/en/overview/0-All_manufactures/0-All_models.html?page=4&powerunit=2">Link Text 4</a> |
<a href="/en/overview/0-All_manufactures/0-All_models.html?page=5&powerunit=2">Link Text 5</a> |
<!-- Next page link -->
<a href="/en/overview/0-All_manufactures/0-All_models.html?page=2&powerunit=2">Link Text Next ></a>
</div>
我正在尝试使用Scrapy(Basespider)根据它的链接文本选择链接:
nextPage = HtmlXPathSelector(response).select("//div[@class='paginationControl']/a/@href").re("(.+)*?Next")
例如,我想根据文本为“Link Text Next”的事实选择下一页链接。有什么想法吗?
答案 0 :(得分: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
会更加通用,但仍具有足够的特异性。
答案 1 :(得分:4)
您可以使用以下XPath表达式:
//div[@class='paginationControl']/a[text()="Link Text Next"]/@href
这会选择带有文字href
的链接的"Link Text Next"
属性。
如果您需要更多控制权,请参阅XPath string functions。
答案 2 :(得分:1)
您的xpath正在选择href,而不是a
标记中的文本。从你的例子中看,href中没有next
,所以你找不到RE。