gpt4 book ai didi

python - CSS 或 xpath :select the first 2 elements

转载 作者:行者123 更新时间:2023-12-01 05:06:31 25 4
gpt4 key购买 nike

我正在练习Scrapy,想问一个问题:

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

<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()

最佳答案

我看到两件事:

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

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

  • 我认为a:nth-child(-n+3) cssselect 未正确翻译以 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 中链接它们):

In [1]: import scrapy

In [2]: selector = scrapy.Selector(text="""
...: <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>""")

In [3]: selector.css("td.c3 a:nth-child(-n+3)::text").extract()
Out[3]: []


In [4]: selector.css("td.c3").xpath("(.//a)[position() < last()]//text()").extract()
Out[4]: [u'movie', u'movieEN']

In [5]:

或者如果您只考虑 <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']

关于python - CSS 或 xpath :select the first 2 elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24904482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com