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

Python使用BeautifulSoup获取同class多个div的选项文本

问题根因

你重复调用find()方法的逻辑存在缺陷:BeautifulSoup的find()方法仅会返回DOM树中第一个匹配筛选规则的元素,因此你四次调用拿到的永远是第一个class包含subject-option的div(即A选项),无法获取其余三个选项的内容。同时直接读取div的.text属性会连带取出内部空span产生的冗余空白字符,需要做简单清洗。

另外你的代码中使用Python内置类型名list作为变量名,会覆盖内置列表构造方法,存在潜在报错风险,建议替换为soup、question_item等合法变量名。

实现方案

提供两种可直接运行的实现方式,按需选择即可:

方案1:批量获取所有选项后按顺序映射

使用find_all()方法一次性获取所有符合规则的选项div,返回结果的顺序和页面DOM顺序完全一致,刚好对应A/B/C/D四个选项:

# 提取题干
question = question_item.find('pre', class_="subject-question").text.replace('\n', '').strip()

# 批量获取所有选项节点
option_nodes = question_item.find_all('div', class_="subject-option")
# 清洗文本:去除换行、首尾空格、连续冗余空白
options = []
for node in option_nodes:
    raw_text = node.text.replace('\n', '').strip()
    clean_text = ' '.join(raw_text.split())
    options.append(clean_text)

# 按顺序赋值
option_A, option_B, option_C, option_D = options

方案2:按属性精准匹配(稳定性更高)

每个选项div都自带data-option属性标记了选项标识,直接按属性匹配不会受页面选项顺序变动影响,鲁棒性更强:

# 提取题干
question = question_item.find('pre', class_="subject-question").text.replace('\n', '').strip()

# 封装选项提取函数
def fetch_option(mark):
    node = question_item.find(
        'div', 
        class_="subject-option",
        attrs={"data-option": mark}
    )
    raw_text = node.text.replace('\n', '').strip()
    return ' '.join(raw_text.split())

option_A = fetch_option("A")
option_B = fetch_option("B")
option_C = fetch_option("C")
option_D = fetch_option("D")
提取效果

针对你提供的HTML片段,两种方案最终清洗得到的选项结果均为:

  • option_A:(A) बढ़ेगा
  • option_B:(B) घटेगा
  • option_C:(C) वही रहेगा
  • option_D:(D) इनमें से कोई नहीं
    完全满足CSV导入场景下的结构化数据要求,无冗余空白、无错配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:03:29