css或xpath:选择前2个元素

2024-10-01 17:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我练习刮痧,想问一个问题:

我要废弃的网站结构如下:

<td class="c3">
    <div class="text">
        <a class="title" href="https:// ">movie</a>
        <a  href="https:/ ">movieEN</a>
        <p><ins><a hpp="thisweek-guide" href="https:// ">see more</a></ins></p>
    </div>
</td>

但是我只想要第一个2 href元素(movie和MovieEN),没有最后一个元素(参见更多) 我该怎么办?
这是我的密码,不能用了

ssel.css("td.c3 a:nth-child(-n+3)::text").extract()


Tags: texthttpsdiv元素title网站movie结构
1条回答
网友
1楼 · 发布于 2024-10-01 17:22:16

我看到两件事:

  • a:nth-child(-n+3)将选择父元素的前3个子元素。在

在您的例子中,它将选择所有3个a元素:前2个是<div class="text">的子元素1和2,最后一个是<ins>的第一个子元素

  • 我认为a:nth-child(-n+3)没有被{}正确地翻译为an+b形式的负值n(scrapy在内部使用cssselect)

检查一下:

>>> cssselect.HTMLTranslator().css_to_xpath('a:nth-child(-n+3)')
u"descendant-or-self::*/*[name() = 'a' and ((position() -3) mod -1 = 0 and position() >= 3)]"

应该是u"descendant-or-self::*/*[name() = 'a' and ((position() -3) mod -1 = 0 and position() <= 3)]"

我建议您使用CSS选择器和XPath的组合(可以将它们链接成scrapy):

^{2}$

或者如果只考虑<div class="text">的子级:

In [8]: selector.css("td.c3 > * > a::text").extract()
Out[8]: [u'movie', u'movieEN']

In [9]: selector.css("td.c3 div.text > a::text").extract()
Out[9]: [u'movie', u'movieEN']

相关问题 更多 >

    热门问题