我在用蟒蛇汤。
我的html中有几个<div>层,在内部的<div>标记中有一个id=页面中断属性。我能写一个通用代码吗?我可以从外层获得*<div>*吗?所有*<div>*都是并行的。它们在同一层。
包含id=分页的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>发布于 2022-01-25 23:26:06
我希望我已经正确理解了你的问题。
您可以使用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>
--------------------------------------------------------------------------------或者:
首先选择包含<div>的id=page-break (在任何级别上),然后使用: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)https://stackoverflow.com/questions/70856528
复制相似问题