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

BeautifulSoup提取嵌套标签文本报错,求类同成功方案的解决办法

解决方案

你遇到的NoneType报错,是因为部分<h5>标签里可能没有span.price元素,直接调用find_next_sibling()会触发报错;同时原代码get_names函数存在缩进错误,if name语句在循环外,只会处理最后一个元素的结果。

核心修复点

  • 先判断span.price是否存在,再执行后续操作,避免NoneType报错
  • 使用find_next_sibling(text=True)获取span后的纯文本,并用strip()清理空白字符
  • 修正函数内的缩进问题,确保每个元素都被正确遍历处理

修正后的完整代码

from requests import get
from bs4 import BeautifulSoup

# 补充你的请求头,避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

def get_basic_info(content_list):
    basic_info = []
    for item in content_list:
        # 用extend代替append,避免生成嵌套列表,简化后续遍历
        basic_info.extend(item.find_all('h5'))
    return basic_info

def get_names(basic_info):
    names = []
    for i in basic_info:
        price_span = i.find("span", attrs={"class": "price"})
        # 先判断价格标签是否存在
        if price_span:
            # 获取span后的纯文本节点
            name_text = price_span.find_next_sibling(text=True)
            if name_text:
                # 清理文本前后的空白字符,过滤空内容
                cleaned_name = name_text.strip()
                if cleaned_name:
                    names.append(cleaned_name)
    return names

all_names = []
for page in range(1, 18):
    # 用f-string拼接URL,更简洁易读
    base_url = f"https://www.easycar.tw/carList.php?Action=search&show=col&lifting=desc&year=&year1=&page={page}"
    response = get(base_url, headers=headers)
    html_soup = BeautifulSoup(response.text, 'html.parser')
    content_list = html_soup.find_all('div', attrs={'class': 'caption'})
    basic_info = get_basic_info(content_list)
    page_names = get_names(basic_info)
    # 累加每页的结果,避免被覆盖
    all_names.extend(page_names)

# 输出提取到的车型名称
print(all_names)

额外优化说明

  • 重构get_basic_info的返回结构,避免嵌套列表,减少后续遍历的复杂度
  • 使用f-string替代字符串拼接,提升代码可读性和维护性
  • 增加多层空值判断,确保代码在页面结构异常时也能稳定运行
  • 单独维护全局结果列表,避免每次循环覆盖之前提取的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:10:22