python - 带有 :not does not behave as expected 的 CSS 选择器

标签 python css beautifulsoup css-selectors

我想使用 CSS 选择器在 Python 中使用 CSS 选择器选择值 SOUND WORD 元素之后但在值为 COMPONENTS 的元素之前的所有内容。

<p class="p_cat_heading">SOUND WORD</p>
<p class="p_normal__and__avoid_page_break_after"><span class="c_tone_char">Vene</span><span class="c_tone_char__and__underline">zue</span><span class="c_tone_char">la</span> /<span class="calibre22">venedswela</span>/</p>
<p class="p_normal__and__avoid_page_break_after">South American country over the equator, known in part for its sunny beaches. Pronounce it in Italian for a better sound match.</p>
<p class="p_normal__and__avoid_page_break_after"><img width="30%" alt="" src="../images/00461.jpeg" class="calibre18"/></p>
<p class="p_cat_heading__and__centre_alignment">COMPONENTS</p>

我正在使用以下 CSS 选择器:

content = str(soup.select_one('.p_cat_heading:contains("SOUND WORD") + :not(.p_cat_heading)'))  # type: str

这应该选择所有内容,直到具有类 p_cat_heading 的元素。但是它只选择:

<p class="p_normal__and__avoid_page_break_after"><span class="c_tone_char">Vene</span><span class="c_tone_char__and__underline">zue</span><span class="c_tone_char">la</span> /<span class="calibre22">venedswela</span>/</p>

我一定是误解了 CSS 选择器的工作原理。我以为 : 像 Python 切片一样工作,但事实并非如此。也就是说,我不确定我错过了什么。

最佳答案

感谢@Barmar 在这方面的帮助。重申一下他的意见,你不能用 CSS 选择器来做到这一点。相反,我所做的是遍历元素,直到到达分隔符:

for temp_heading in heading.find_next_siblings():
    if temp_heading.attrs["class"][0] == "p_cat_heading":
        break
    else:
        print(str(temp_heading))
organized_entry["soundword"] = content

其中 temp_heading 是 bs.element.Tag 的一个实例,它开始于指向:

<p class="p_cat_heading">SOUND WORD</p>

关于python - 带有 :not does not behave as expected 的 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56909999/

相关文章:

python - 如何在Beautiful Soup中找到所有段落中的所有链接

Python Beautifulsoup 访问标签中的文本?

javascript - JQuery——我做错了什么?

html - 如何在不改变位置的情况下将一个 div 重叠到另一个 div - Css

javascript - 将样式应用于未选择的元素

python - 使用 Beautiful Soup 提取 css 链接

python - Django 在 CreateView 中禁用/排除字段,但在 UpdateView 中启用/包含它

mysql - 如何以Python方式匹配和分配数据?

python - 如何在python中递归计算pi?

python - 使用 python : how to add a UUID column? 进行 Spark 流式传输