我正在尝试编写一个XPath表达式,该表达式可以返回与搜索的下一页关联的URL。
导致搜索到下一页的URL始终是我尝试使用href
的标记a
之后的span class="navCurrentPage"
标记中的following-sibling
提取下一个URL的术语。我在Chrome控制台中的搜索是:
$x('//span[@class="navCurrentPage"][1]/following-sibling::a/@href[1]')
我认为通过指定@href[1]
我只会得到一个URL(认为[1]选择列表中的第一个元素),但是Chrome(和Scrapy)却返回了四个URL。我不明白为什么。请帮助我了解如何选择要查找的一个URL。
这里是您可以找到给我带来麻烦的HTML的URL:
谢谢您的帮助。
答案 0 :(得分:1)
运算符优先级://x[1]
的意思是/descendant-or-self::node()/child::x[1]
,它找到作为其父级的第一个孩子的后代x
。您想要(//x)[1]
在所有名为x
的后代中找到第一个节点。
答案 1 :(得分:0)
xpath索引将应用于所有匹配的记录,如果只想获取第一项,则获取第一个实例。
$x('//span[@class="navCurrentPage"][1]/following-sibling::a/@href[1]').extract_first()
答案 2 :(得分:0)
只需添加.extract_first()或.get()即可获取第一项。
请参阅草率文档here。
答案 3 :(得分:0)
我发现这对确保将支架放在正确的位置非常有帮助。 What is the XPath expression to find only the first occurrence? 另外,第一次出现可能是[0]而不是[1]