Solución:
Puede utilizar selectores de CSS para encontrar los datos que necesita. En tu caso div > h3 ~ div
encontraras todo div
elementos que están directamente dentro de un div
elemento y son precedidos por un h3
elemento.
import bs4
page= """
<div class="box effect">
<div class="row">
<div class="col-lg-10">
<h3>HEADING</h3>
<div><i class="fa user"></i> NAME</div>
<div><i class="fa phone"></i> MOBILE</div>
<div><i class="fa mobile-phone fa-2"></i> NUMBER</div>
<div><i class="fa address"></i> XYZ_ADDRESS</div>
</div>
</div>
</div>
"""
soup = bs4.BeautifulSoup(page, 'lxml')
# find all div elements that are inside a div element
# and are proceeded by an h3 element
selector="div > h3 ~ div"
# find elements that contain the data we want
found = soup.select(selector)
# Extract data from the found elements
data = [x.text.split(';')[-1].strip() for x in found]
for x in data:
print(x)
Editar: para raspar el texto en el encabezado.
heading = soup.find('h3')
heading_data = heading.text
print(heading_data)
Editar: O puede obtener el encabezado y otros elementos div a la vez usando un selector como este: div.col-lg-10 > *
. Esto encuentra todos los elementos dentro de un div
elemento que pertenece a col-lg-10
clase.
soup = bs4.BeautifulSoup(page, 'lxml')
# find all elements inside a div element of class col-lg-10
selector="div.col-lg-10 > *"
# find elements that contain the data we want
found = soup.select(selector)
# Extract data from the found elements
data = [x.text.split(';')[-1].strip() for x in found]
for x in data:
print(x)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)