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
相关产品推荐
相关产品推荐

