我有一些HTML:
<div class='cl1'>
<div class='cl2'>text_1</div>
<div class='cl3'>
<div class='cl2'>text_2</div>
</div>
</div>
我需要找到cl2类的任何项目,其中cl1作为父级,因此我需要 text_1 ,但不需要 text_2 。在简单的CSS中它应该是这样的:
'div.cl1>div.cl2'
但我使用 robobrowser 和 BeautifulSoup ,当我尝试
soup.select('div.cl1>div.cl2')
它说css选择器错了。
答案 0 :(得分:1)
您的选择器位于正确的轨道上,您只需要将类别分隔开,即div.cl1>div.cl2
应为div.cl1 > div.cl2
:
In [5]: from bs4 import BeautifulSoup
In [6]: html = """<div class='cl1'>
<div class='cl2'>text_1</div>
<div class='cl3'>
<div class='cl2'>text_2</div>
</div>
</div>"""
In [7]: soup = BeautifulSoup(html, "html.parser")
In [8]: soup.select_one("div.cl1 > div.cl2") # good
Out[8]: <div class="cl2">text_1</div>
In [9]: print(soup.select_one("div.cl1>div.cl2")) # bad
None
答案 1 :(得分:0)
一种可能的解决方案是:
from bs4 import BeautifulSoup
data = """
<div class='cl1'>
<div class='cl2'>text_1</div>
<div class='cl3'>
<div class='cl2'>text_2</div>
</div>
</div>
"""
soup = BeautifulSoup(data)
divs = [div
for div in soup.find_all("div", {'class': 'cl2'})
if 'cl1' in div.parent["class"]]
# [<div class="cl2">text_1</div>]