scrapy 剪贴xpath根据子元素中的文本值和缺少元素选择父元素

bpsygsoo  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(146)

我想选择所有article元素,这些元素不包含类为statusspan元素,并且嵌套的a元素包含href属性,该属性包含文本“rent.html”。
我已经成功地得到了a元素,如下所示:
response.xpath('//article[@class="car"]//a[contains(@href,"rent.html")]')
但是阅读here并尝试选择第一个父元素article,返回“data=0”
response.xpath('//article[@class="car"]//a[contains(@href,"rent.html")]//parent::article and not //article[@class="car"]//span[@class="status"]')
我也试过this
response.xpath('//article[@class="car"][//a[contains(@href,"rent.html")]/article and not //article[@class="car"]//span[@class="status"]')')
我不知道对于我的用例该用什么表达。

<article class="car">
    <div>
        <div class="container">
            <a href="/34625030/rent.html">
            </a>
        </div>
    </div>
</article>
<article class="car">
    <div>
        <div class="container">
            <a href="/34625230/rent.html">
            </a>
        </div>
    </div>
</article>
<article class="car">
    <div>
        <div class="container">
            <a href="/12325230/buy.html">
            </a>
        </div>
    </div>
</article>  
<article class="car">
    <div>
        <div class="container">
            <a href="/34632230/rent.html">
            </a>
        </div>
    </div>
    <span class="status">Rented</span>
</article>
bfhwhh0e

bfhwhh0e1#

下面的XPath表达式将完成以下工作:

"//article[not(.//span[@class='status'])][.//a[contains(@href,'rent.html')]]"

整个命令为:

response.xpath("//article[not(.//span[@class='status'])][.//a[contains(@href,'rent.html')]]")

说明:
将需求转换为XPath语法。
"选择所有元素article"-//article
"不包含具有类状态的span元素"-[not(.//span[@class='status'])]
"并且其中嵌套的a元素包含href属性,该属性包含文本" rent.html ""-[.//a[contains(@href,'rent.html')]]
我在共享的示例XML上测试了上面的XPath,它工作正常。

相关问题