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

如何根据span的class属性为百分比数据添加正负符号

解决方案

核心思路

定位页面中带icon-Caret-up/icon-Caret-down类的<span>元素,通过判断这些图标的存在,给对应的百分比数值添加+或-符号,最终拼接成目标格式。

示例代码

from bs4 import BeautifulSoup
import requests

# 请求目标页面(可添加headers避免反爬拦截)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
url = "https://coinmarketcap.com/currencies/fomo-token/"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 处理市值数据
market_cap_container = soup.find("div", {"data-testid": "market-cap"})
if market_cap_container:
    # 提取市值数值
    cap_amount = market_cap_container.find("span", class_="sc-7bc5019c-0").get_text(strip=True)
    # 定位涨跌百分比的容器
    change_wrapper = market_cap_container.find("span", class_="sc-97d6d2ca-0")
    
    if change_wrapper:
        # 判断涨跌图标
        is_up = change_wrapper.find("span", class_="icon-Caret-up") is not None
        is_down = change_wrapper.find("span", class_="icon-Caret-down") is not None
        # 提取百分比文本
        percent_text = change_wrapper.find("span", class_="sc-7bc5019c-0").get_text(strip=True)
        
        # 格式化符号与百分比
        if is_up:
            formatted_change = f"(+ {percent_text})"
        elif is_down:
            formatted_change = f"(- {percent_text})"
        else:
            formatted_change = f"( {percent_text})"
        
        # 输出目标格式
        print(f"Market Cap        :  {cap_amount} {formatted_change}")

# 稀释市值处理逻辑完全一致,仅需替换容器的data-testid
fdmc_container = soup.find("div", {"data-testid": "fully-diluted-market-cap"})
if fdmc_container:
    fdmc_amount = fdmc_container.find("span", class_="sc-7bc5019c-0").get_text(strip=True)
    fdmc_change_wrapper = fdmc_container.find("span", class_="sc-97d6d2ca-0")
    
    if fdmc_change_wrapper:
        fdmc_is_up = fdmc_change_wrapper.find("span", class_="icon-Caret-up") is not None
        fdmc_is_down = fdmc_change_wrapper.find("span", class_="icon-Caret-down") is not None
        fdmc_percent = fdmc_change_wrapper.find("span", class_="sc-7bc5019c-0").get_text(strip=True)
        
        if fdmc_is_up:
            fdmc_formatted = f"(+ {fdmc_percent})"
        elif fdmc_is_down:
            fdmc_formatted = f"(- {fdmc_percent})"
        else:
            fdmc_formatted = f"( {fdmc_percent})"
        
        print(f"Diluted Market Cap:  {fdmc_amount} {fdmc_formatted}")

注意事项

  • CoinMarketCap的页面class或data-testid可能会随版本更新,若代码失效,需通过浏览器开发者工具重新定位元素选择器。
  • 若请求频繁被拦截,可添加代理或延长请求间隔避免触发反爬机制。

内容的提问来源于stack exchange,提问作者Drew Duazeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:26