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

Python BeautifulSoup提取div标签内数值96失败问题求解

修复方案

错误原因

你的标签选择逻辑不符合实际HTML结构:

  • 你写的soup2.find("div",{"class":"price"}, {"id":"product-promotion-price"})会尝试匹配同时携带class="price"和id="product-promotion-price"两个属性的div标签
  • 但实际页面结构里,class="price"是外层div的属性,id="product-promotion-price"是该div内部span子标签的属性,两个属性不属于同一个标签,因此匹配结果为空。

修正代码

id属性在HTML页面中是全局唯一的,直接匹配对应id的span标签是最高效的写法,完整可运行代码如下:

import requests
import re
from bs4 import BeautifulSoup

product_url = 'https://glomark.lk/coconut/p/11624'
# 加请求头模拟浏览器访问,避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
resp = requests.get(product_url, headers=headers)
soup = BeautifulSoup(resp.content, 'html.parser')

# 直接匹配价格span标签
price_text = soup.find("span", id="product-promotion-price").get_text(strip=True)
# 提取商品名
product_name = soup.find("div", class_="product-title").get_text(strip=True)
# 从文本Rs 96.00中提取数值96
price_value = int(float(re.search(r'\d+\.?\d*', price_text).group()))

运行后price_value就是你需要的整数96。

补充说明

  • BeautifulSoup中匹配class属性时,推荐使用class_="类名"的写法,因为class是Python内置关键字,直接传字典写法虽然可用,但容易出现属性冲突问题。
  • 如果直接请求拿不到完整内容,说明页面价格是前端JS动态渲染的,可以改用selenium等工具模拟浏览器加载页面后再做解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:48:31