尽管使用[]指定了项目,但Xpath表达式仍拉出多个项目

时间:2019-09-03 03:50:02

标签: xpath scrapy

我正在尝试编写一个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:

https://www.yachtworld.com/core/listing/cache/searchResults.jsp?cit=true&slim=quick&ybw=&sm=3&searchtype=advancedsearch&Ntk=boatsEN&Ntt=&is=false&man=&hmid=102&ftid=101&enid=0&type=%28Sail%29&fromLength=35&toLength=50&fromYear=1985&toYear=2010&fromPrice=&toPrice=&luom=126&currencyid=100&city=&rid=100&rid=101&rid=104&rid=105&rid=107&rid=108&rid=112&rid=114&rid=115&rid=116&rid=128&rid=130&rid=153&pbsint=&boatsAddedSelected=-1

谢谢您的帮助。

4 个答案:

答案 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]