BeautifulSoup如何提取<p>标签文本中的价格内容,去除多余描述文字
实现代码与说明
方法1:字符串分割(适配当前固定前缀场景)
你抓取到的文本前缀固定以冒号分隔价格内容,直接按冒号切割即可提取目标价格字符串,再做格式转换即可得到标准数值:
from bs4 import BeautifulSoup import requests headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"} p = requests.get(url = 'https://www.tia-mobiteli.hr/detaljan-prikaz.aspx?gid=11-appise_64wheu', headers = headers) soup = BeautifulSoup(p.content,'lxml') raw_price = soup.find('div', class_='widget widget-info widget-price').p.text.strip() # 步骤1:提取纯价格字符串 price_str = raw_price.split(':')[-1].strip() print(price_str) # 输出:3.649,00 kn # 步骤2:转换为标准数值格式 # 先去掉千位分隔符".",再把小数位分隔符","替换为".",最后转浮点数 price_num = float(price_str.split(' ')[0].replace('.','').replace(',','.')) print(price_num) # 输出:3649.00
方法2:正则匹配(适配前缀不固定的通用场景)
如果后续页面的前缀文本有变动,用正则匹配数字格式的内容更稳定:
import re from bs4 import BeautifulSoup import requests headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"} p = requests.get(url = 'https://www.tia-mobiteli.hr/detaljan-prikaz.aspx?gid=11-appise_64wheu', headers = headers) soup = BeautifulSoup(p.content,'lxml') raw_price = soup.find('div', class_='widget widget-info widget-price').p.text.strip() # 匹配符合 x.xxx,xx 格式的价格 match_res = re.search(r'\d+\.\d+,\d+', raw_price) if match_res: price_str = match_res.group() + ' kn' print(price_str) # 转换数值格式逻辑和上面一致 price_num = float(match_res.group().replace('.','').replace(',','.')) print(price_num)
内容的提问来源于stack exchange,提问作者Arstegall
相关产品推荐
相关产品推荐

