如何根据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
相关产品推荐
相关产品推荐

