Quiero tomar el valor después de la cadena 'Estrato:' y 'Piso No:'

<ul class="boxcube">
<!--area-->
<li><b>Área Const.:</b><br/>
                        90,00 m²</li>
<!--Estrato si aplica-->
</li><li><b>Estrato:</b><br/>
                    5         
                </li>
<!--edad si aplica-->
<li><b>Antigüedad:</b><br/>
                        1 a 8 años</li>
<!--piso #-->
<li><b>Piso No:</b><br/>
                        6º</li>
</ul>

Aquí está mi código

      try:
        estrato=soup.find('ul',class_='boxcube').find(string=re.compile("Estrato:")).next_sibling
      except:
        estrato='NA'
      try:
        piso=soup.find('ul',class_='boxcube').find(string=re.compile("Piso No:")).next_sibling
      except:
        piso='NA'

Que me devuelve Ninguno en ambos casos.

El resultado que quiero es

Piso: 6
Estrato: 5

Gracias.

1
JuanG_95 8 may. 2021 a las 00:04

1 respuesta

La mejor respuesta

Puede usar este código para buscar texto junto a los elementos deseados:

from bs4 import BeautifulSoup

html_doc = """
<ul class="boxcube">
<!--area-->
<li><b>Área Const.:</b><br/>
                        90,00 m²</li>
<!--Estrato si aplica-->
</li><li><b>Estrato:</b><br/>
                    5         
                </li>
<!--edad si aplica-->
<li><b>Antigüedad:</b><br/>
                        1 a 8 años</li>
<!--piso #-->
<li><b>Piso No:</b><br/>
                        6º</li>
</ul>
"""

soup = BeautifulSoup(html_doc, "html.parser")

e = soup.select_one('b:-soup-contains("Estrato:")').find_next_sibling(text=True)
p = soup.select_one('b:-soup-contains("Piso No:")').find_next_sibling(text=True)

print("Piso:", p.strip())
print("Estrato:", e.strip())

Huellas:

Piso: 6º
Estrato: 5
2
Andrej Kesely 7 may. 2021 a las 21:08