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

如何用BeautifulSoup的CSS选择器精准定位特定SqFt元素?

问题

需要从指定页面提取字符串834 - 1540 SqFt,当前使用.content-text:-soup-contains('SqFt')选择器时,会同时匹配到834 - 1540 SqFt和$505 per SqFt两个元素。由于页面字段顺序不固定,无法依赖select_one()取第一个元素,需要精准定位目标元素。

解决方案

可以通过正则匹配文本特征实现精准过滤,以下是两种可靠的实现方式:

方法1:先选中候选元素,再用正则筛选(兼容性好)

先获取所有包含SqFt的元素,再通过正则匹配「数字 - 数字 SqFt」的格式,筛选出目标元素:

import urllib3
import requests
import re
from bs4 import BeautifulSoup

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

link = 'https://www.livabl.com/atlanta-ga/j5'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}

with requests.Session() as s:
    s.headers.update(headers)
    res = s.get(link, verify=False)
    soup = BeautifulSoup(res.text, "lxml")
    try:
        # 获取所有含SqFt的候选元素
        sq_ft_candidates = soup.select(".overview-development-details .content-text:-soup-contains('SqFt')")
        # 正则匹配:数字(可带空格)-数字(可带空格) SqFt
        pattern = re.compile(r'^\d+\s*-\s*\d+\s+SqFt$')
        # 筛选文本符合格式的元素
        sq_ft = [elem for elem in sq_ft_candidates if pattern.match(elem.get_text(strip=True))]
    except AttributeError: 
        sq_ft = []
    print(sq_ft)

方法2:使用:-soup-contains-regex伪类(简洁高效,需BeautifulSoup ≥4.10)

直接通过CSS伪类结合正则表达式,一步完成精准选择:

import urllib3
import requests
from bs4 import BeautifulSoup

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

link = 'https://www.livabl.com/atlanta-ga/j5'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}

with requests.Session() as s:
    s.headers.update(headers)
    res = s.get(link, verify=False)
    soup = BeautifulSoup(res.text, "lxml")
    try:
        # 用正则伪类直接筛选符合格式的元素
        sq_ft = soup.select(".overview-development-details .content-text:-soup-contains-regex('^\\d+\\s*-\\s*\\d+\\s+SqFt$')")
    except AttributeError: 
        sq_ft = []
    print(sq_ft)

说明

  • 方法1兼容性更强,无需依赖特定版本的BeautifulSoup;
  • 方法2代码更简洁,直接通过选择器完成过滤,执行效率更高。

内容的提问来源于Stack Exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:57