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

使用Beautiful Soup爬取网页时,如何更优处理页面变体提取MRP?

优化MRP爬取的高效方案

你现在靠硬编码标签class的方式,确实会因为页面结构变动频繁失效。既然所有页面的MRP都统一以MRP: 数值这类格式呈现,完全可以基于文本内容而非标签结构来提取,这是更稳定灵活的方案。

方法1:BeautifulSoup文本搜索+正则匹配

利用BeautifulSoup定位包含MRP关键词的文本节点,再用正则提取数值:

import re
from bs4 import BeautifulSoup

def get_MRP(soup):
    # 搜索所有包含MRP的文本(忽略大小写)
    mrp_nodes = soup.find_all(text=re.compile(r'MRP:', re.IGNORECASE))
    if mrp_nodes:
        # 取第一个匹配的文本,清理空格后提取数值
        clean_text = mrp_nodes[0].strip()
        # 匹配整数或小数格式的数值
        num_match = re.search(r'\d+\.?\d*', clean_text)
        if num_match:
            return num_match.group()
    return ""

这个方法不绑定任何标签class,只要页面里有MRP的文本标识就能提取,能兼容各种页面结构变体,还能处理大小写、多余空格的情况。

方法2:直接匹配页面全局文本

如果不需要精准定位节点,也可以直接抓取页面所有文本后做正则匹配,写法更简洁:

import re
from bs4 import BeautifulSoup

def get_MRP(soup):
    full_text = soup.get_text()
    # 匹配MRP: 后紧跟的数值,忽略中间空格和大小写
    result = re.search(r'MRP:\s*(\d+\.?\d*)', full_text, re.IGNORECASE)
    return result.group(1) if result else ""

这种方式完全脱离标签结构的限制,容错性拉满,只要页面文本里有符合格式的MRP就不会漏。

额外适配技巧

  • 如果MRP带货币符号(比如MRP: ₹100),可以把正则改成r'MRP:\s*[^\d]*(\d+\.?\d*)',自动过滤掉符号。
  • 要是怕误匹配类似“SMRP:”的文本,给MRP加单词边界:r'\bMRP:\b\s*(\d+\.?\d*)'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:17:23