<div class="row features_2 "><br />
<ul>
<li><b>Área privada:</b><br />
70,00 m²
</li>
<!--area-->
<li><b>Área Const.:</b><br />
70,00 m²
</li>
<!--precio metro cuadrado-->
<li><b>Precio m²:</b><br />
3.142.857/m²
</li>
<!--Valor noche si es alquiler vacacional-->
<!--precio de administracion -->
<li><b>Admón:</b><br />
$150,000</li>
<!--Estrato si aplica-->
<li><b>Estrato:</b> <br />
3
<!--Estado si aplica-->
<li><b>Estado:</b> <br />
Excelente
</li>
<!--edad si aplica-->
<li><b>Antigüedad:</b> <br />
1 a 8 años</li>
<!--piso #-->
<!--Clima-->
<!--tipo de apartamento si aplica-->
<!--para parqueaderos-->
<!--caracteristicas parqueadero-->
<!--Sector (siempre va)-->
<li><b>Sector:</b> <br />
<a href="#pnlMap" style="font-weight: bold;">Ver Mapa</a>
</li>
</ul>
从上面我想获取标签内的值,但是我在将值保存到单个列表时遇到了麻烦。
我想根据自身内部的数据保存值。
例如,如果标签包含'Áreaprivada:',那么我将值'70,00m²'保存到列表名称区域
如果标签包含'Preciom²:',那么我要将值3.142.857 /m²保存到名为Precio的列表中
我已经尝试了以下代码来获取元素,但不确定如何根据上述条件编写将数据保存到列表中的条件。
import requests
from bs4 import BeautifulSoup
page = requests.get('https://www.fincaraiz.com.co/oceana-52/barranquilla/proyecto-nuevo-det-1041165.aspx')
soup = BeautifulSoup(page.content, 'lxml')
box_3 = soup.find('div' ,'row features_2 ')
box_3_1 = box_3.findAll('li')
for i in box_3_1:
print (i)
否则还有其他选项可以将上述标签中的数据保存到相应的列表中。
答案 0 :(得分:2)
使用<br>
的{{3}}属性:
for li in box_3_1:
print(str(li.br.next_sibling).strip())
输出:
71,00 a 185,00 m²
78,00 a 207,00 m²
5
Cálido
OP希望将“Área”和“Precio”数据存储在单独的列表中。假设这两个字符串永远不会出现在同一个<li>
标题中,这里有一个完整的解决方案:
area = []
precio = []
for li in box_3_1:
heading_words = li.b.text.split()
target_content = str(li.br.next_sibling).strip()
if "Área" in heading_words:
area.append(target_content)
elif "Precio" in heading_words:
precio.append(target_content)
对于更通用的解决方案,请考虑制作关键标题术语列表,然后将所有输出存储在dict中。例如:
import re
key_terms = ["Área", "Precio", "Estrato"]
data = {k:[] for k in key_terms}
for li in box_3_1:
heading = li.b.text
target_content = str(li.br.next_sibling).strip()
for term in key_terms:
# Headers like "Estrato:" do not match on split() due to end ":"; use re instead.
if re.search(term, heading):
data[term].append(target_content)
data
{'Estrato': ['5'],
'Precio': [],
'Área': ['71,00 a 185,00 m²', '78,00 a 207,00 m²']}