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

BeautifulSoup如何按class后缀数值范围爬取目标div元素

BeautifulSoup按类名数字范围筛选元素实现方案

CSS原生属性选择器仅支持字符串匹配,不支持数值范围判断,无法直接在选择器规则里完成数字大小筛选,你可以根据场景选择以下两种方案实现需求:

方案1:枚举匹配(适合小范围数值筛选)

当你要筛选的数值区间很小(比如当前需求的5-10),直接在选择器里枚举所有符合要求的类名即可,代码最简洁:

# 兼容元素class包含多个类名的场景
target_divs = soup.select(
    'div[class*="item-5"],'
    'div[class*="item-6"],'
    'div[class*="item-7"],'
    'div[class*="item-8"],'
    'div[class*="item-9"],'
    'div[class*="item-10"]'
)

如果你的目标div只有item-x这一个类名,可以用性能更好的类选择器写法:

target_divs = soup.select('div.item-5, div.item-6, div.item-7, div.item-8, div.item-9, div.item-10')

方案2:粗筛+后置逻辑过滤(适合大范围/复杂规则筛选)

如果筛选区间很大(比如需要筛选5-100区间的元素),枚举选择器维护成本很高,推荐先选出所有带item-前缀的div,再通过代码提取数字判断范围:

import re

# 第一步:粗筛所有带item-类的div
all_item_divs = soup.select('div[class*="item-"]')
target_divs = []

for div in all_item_divs:
    # 遍历元素的所有class,提取item-后面的数字
    for cls in div.get('class', []):
        num_match = re.fullmatch(r'item-(\d+)', cls)
        if num_match:
            item_num = int(num_match.group(1))
            # 判断数字是否在目标区间
            if 5 <= item_num <= 10:
                target_divs.append(div)
                break

这种写法只需要修改if判断里的区间数值,就能适配任意范围的筛选需求,不会出现误匹配item-100这类不符合要求元素的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:57:23