我在不同的层中有一个标签,我如何才能把它放到同一层



我使用的是python汤。

我的html中有几个<div>层,内部<div>标记中有一个id=page-break属性。我能写一个通用代码吗?我可以从外层获得*<div>*吗?所有*<div>*都是平行的,即它们在同一层。

包含id=分页符的div层可以在第二个内层或第三个内层。并且我们无法从*<div>*层获得任何信息。

我不想得到最外层的div,而是我列出的带有星号的div。

<div>
*<div>*
<div>
<div id=page-break> asdf </div>
</div>
*</div>*

*<div>*
<div id=page-break> qwer </div>
*</div>*
*<div>*
<div>
<div id=page-break> asdf </div>
</div>
<div>
</div>
*</div>*

</div>

我希望我能正确理解你的问题。

您可以使用CSS:root伪类来引用最上面的<div>,然后使用:has(#page-break)来获得包含id=page-break:的所有<div>

from bs4 import BeautifulSoup
html = """
<div>
<div>
<div>
<div id=page-break> asdf </div>
</div>
</div>
<div>
<div id=page-break> qwer </div>
</div>
<div>
<div>
<div id=page-break> asdf </div>
</div>
<div>
</div>
</div>
</div>
"""
soup = BeautifulSoup(html, "html.parser")
for div in soup.select(":root > div:has(#page-break)"):
print(div)
print("-" * 80)

打印:

<div>
<div>
<div id="page-break"> asdf </div>
</div>
</div>
--------------------------------------------------------------------------------
<div>
<div id="page-break"> qwer </div>
</div>
--------------------------------------------------------------------------------
<div>
<div>
<div id="page-break"> asdf </div>
</div>
<div>
</div>
</div>
--------------------------------------------------------------------------------

或者:

选择包含id=page-break的第一个<div>(任何级别(,然后使用:scope:

first_div = soup.select_one("div:has(#page-break)")
for div in first_div.select(":scope > div:has(#page-break)"):
print(div)
print("-" * 80)

相关内容

最新更新