如何使用选择器来定位除第一个之外的所有目标

Posted

技术标签:

【中文标题】如何使用选择器来定位除第一个之外的所有目标【英文标题】:How to use the selector to target all except the first one 【发布时间】:2019-12-27 07:53:46 【问题描述】:

我想选择除第一个之外的所有定位项。我用了':nth-of-type(n+2)',但是系统显示错误:仅实现了以下伪类:nth-​​of-type

像这样:

data1 = soup1.select('#zoom > div > p:nth-of-type(n + 2)')..

【问题讨论】:

我已经尝试过 :not(:nth-of-type(1)) & :nth-of-type(n + 2) 【参考方案1】:

问题在于您的beautifulsoup 版本,请确保您使用的版本至少为4.7.1+

在较低版本中不支持更高级的 CSS 选择器。

要获得您的实际版本,您可以这样做

import bs4

print(bs4.__version__)

打印:

4.8.0

然后你可以做 CSS 选择器,例如p:not(:nth-child(1)):

data = '''<div>
  <p>
    1
  </p>
  <p>
    2
  </p>
  <p>
    3
  </p>
</div>'''

soup = bs4.BeautifulSoup(data, 'lxml')
print( soup.select('p:not(:nth-child(1))') )

打印:

[<p>
    2
  </p>, <p>
    3
  </p>]

【讨论】:

是的,我的版本是 4.6.0。你能告诉我在终端更新它的代码吗? @JiaqiNie 你可以从终端做python -m pip install -U bs4。更多信息在这里***.com/questions/2720014/… @JiaqiNie 你确定你使用的是正确版本的 Python 和正确版本的bs4?您使用的是 Jupyter notebook 还是其他版本的 Python?看来您使用的 python 版本不匹配

以上是关于如何使用选择器来定位除第一个之外的所有目标的主要内容,如果未能解决你的问题,请参考以下文章

选择除第一个之外的所有“tr”

选择除第一个之外的所有子元素

jQuery删除除第一行之外的所有表行

如何删除除第一个之外的所有 URL 哈希?

jQuery选择除第一个以外的所有内容

如何关闭除第一个之外的所有以前的 Android 活动?