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

使用BeautifulSoup未找到指定类时如何追加整数或NaN?代码逻辑异常求助

问题解决思路

核心问题分析

  1. 当soup.find_all找不到指定类的span元素时,外层循环会直接跳过,rooms_bed列表不会被追加任何默认值。
  2. 内层循环遍历a.select('title')的结果时,如果当前span里没有title标签,这个循环根本不会执行,导致if len(s)==0的判断永远触发不了——因为s是循环中的单个元素,不存在长度为0的情况。

修正后的代码

import numpy as np
from bs4 import BeautifulSoup

# 假设soup已完成初始化

rooms_bed = []
# 先获取所有目标span元素
target_spans = soup.find_all("span", attrs={"class":"no-svg-bed-icon bed-icon seperator"})

# 处理页面中完全没有目标span的情况
if not target_spans:
    rooms_bed.append(np.nan)  # 也可以替换为你需要的整数,比如0
else:
    for a in target_spans:
        # 获取当前span下的所有title标签
        title_tags = a.select('title')
        # 判断是否存在title标签
        if not title_tags:
            rooms_bed.append(np.nan)  # 无title时追加默认值
        else:
            # 提取第一个title的文本(若有多个可根据需求调整)
            text_content = title_tags[0].get_text().strip()
            rooms_bed.append(text_content)

number_bedrooms = []
for x in rooms_bed:
    # 过滤非字符串类型,避免NaN/整数触发报错
    if isinstance(x, str) and "bedrooms" in x:
        # 清理文本并转换为整数
        num = int(x.replace('bedrooms', '').strip())
        number_bedrooms.append(num)
    else:
        # 未匹配到内容时追加默认值
        number_bedrooms.append(np.nan)

关键优化点

  • 先捕获“无目标span”的场景,确保默认值能被正确追加。
  • 直接判断select返回的title标签列表是否为空,而非遍历单个元素判断长度。
  • 文本处理时加上strip(),避免多余空格导致整数转换失败。
  • 处理number_bedrooms时增加类型判断,防止非字符串值触发报错。

内容的提问来源于stack exchange,提问作者Federico Gottardi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:35:26