You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup与Python解析双列布局的<li>元素并提取属性值到变量

解决BeautifulSoup解析房产特征列表的循环提取问题

嘿,我来帮你搞定这个循环解析的问题!你已经能定位到单个<li>元素了,现在只需要把范围扩大到所有特征项,然后通过循环提取每个属性名和对应值就行。比起单独定义var1、var2这类变量,用字典存储会更灵活(毕竟如果后续属性数量变化,不用挨个改变量名),当然你也可以从字典里再赋值给单独变量,具体方案如下:

实现步骤

  1. 先定位到包含所有特征的容器(也就是id="b_detalii_caracteristici"的<div>);
  2. 提取该容器下所有的<li>元素(不管它属于哪个<ul>);
  3. 遍历每个<li>,拆分出左侧的属性名称,再提取右侧<span>里的属性值;
  4. 将键值对存入字典,方便后续调用。

完整代码示例

from bs4 import BeautifulSoup

# 假设你的HTML内容已经存放在html_content变量中
html_content = '''<div id="b_detalii_caracteristici" class="margin-boxes"> <h2 class="titlu-box special-caracteristici">Caracteristici</h2> <div class="row"> <div class="col-lg-6 col-md-6 col-sm-6"> <ul class="lista-tabelara"> <li>Nr. camere:<span>2</span></li> <li>Suprafaţă utilă:<span>44 mp</span></li> <li>Suprafaţă construită:<span>44 mp</span></li> <li>Compartimentare:<span>decomandat</span></li> <li>Confort:<span>lux</span></li> <li>Etaj:<span>Etaj 1 / 8</span></li> <li>Nr. bucătării:<span>1</span></li> <li>Nr. băi:<span>1</span></li> </ul> </div> <div class="col-lg-6 col-md-6 col-sm-6"> <ul class="lista-tabelara mobile-list"> <li>An construcţie:<span>2019</span></li> <li>Structură rezistenţă:<span>beton</span></li> <li>Tip imobil:<span>bloc de apartamente</span></li> <li>Regim înălţime:<span>P+8E</span></li> <li>Nr. balcoane:<span>1</span></li> </ul> </div> </div></div>'''

soup = BeautifulSoup(html_content, 'html.parser')

# 定位特征容器
features_container = soup.find('div', id='b_detalii_caracteristici')

# 获取所有特征项的<li>元素
all_feature_items = features_container.find_all('li')

# 创建字典存储所有特征
property_features = {}

for item in all_feature_items:
    # 提取属性名称:拆分文本去掉冒号和多余空格
    property_name = item.text.split(':')[0].strip()
    # 提取<span>内的属性值
    property_value = item.find('span').text.strip()
    # 存入字典
    property_features[property_name] = property_value

# 如果你需要单独的变量,可以从字典中赋值
nr_camere = property_features['Nr. camere']
suprafata_utila = property_features['Suprafaţă utilă']
an_constructie = property_features['An construcţie']

# 打印验证结果
print("所有提取的特征:")
for name, value in property_features.items():
    print(f"{name}: {value}")

代码说明

  • 用find_all('li')直接从特征容器中获取所有<li>,不用分别处理两个<ul>,简化了代码;
  • 字典property_features可以灵活存储所有特征,后续要调用哪个属性直接通过键名获取即可;
  • 如果必须用单独的变量,从字典里赋值的方式也比逐个解析<li>更简洁。

内容的提问来源于stack exchange,提问作者Ovidiu Diaconu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:59:07