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

首次网页爬取遇阻:无法获取bonbast.com的美元、欧元汇率值

解决bonbast.com爬取汇率为空的问题

问题原因

你用requests获取的是网站的静态初始HTML,但bonbast的汇率数据是通过JavaScript动态渲染生成的——这些你要找的元素(id="usd1"、class="same_val")在静态页面里根本不存在,所以BeautifulSoup自然找不到对应内容,输出为空。

两种可行解决方案

方案一:直接调用API接口(高效推荐)

bonbast提供了公开的汇率API接口,直接请求就能拿到结构化的JSON数据,无需解析HTML:

import requests

# 请求汇率API
resp = requests.get("https://bonbast.com/api/latest")
exchange_data = resp.json()

# 提取美元、欧元的买卖汇率
usd_buy = exchange_data['usd']['buy']
usd_sell = exchange_data['usd']['sell']
eur_buy = exchange_data['eur']['buy']
eur_sell = exchange_data['eur']['sell']

print(f"美元买入: {usd_buy} | 美元卖出: {usd_sell}")
print(f"欧元买入: {eur_buy} | 欧元卖出: {eur_sell}")

方案二:用Selenium模拟浏览器加载动态内容

如果找不到API,可通过模拟浏览器等待JS渲染完成后再抓取页面:

  1. 先安装依赖:pip install selenium
  2. 下载对应浏览器的驱动(比如ChromeDriver,需和浏览器版本匹配)
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup

# 初始化Chrome驱动(需确保驱动路径正确)
driver = webdriver.Chrome()
driver.get("https://bonbast.com/")

# 等待目标元素加载完成(最多等10秒)
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "usd1"))
)

# 获取渲染后的页面源码
page_html = driver.page_source
soup = BeautifulSoup(page_html, "html.parser")

# 提取目标数据
usd_element = soup.find(id="usd1")
same_val_elements = soup.find_all(class_="same_val")

print(usd_element.text if usd_element else "未找到美元汇率")
for elem in same_val_elements:
    print(elem.text.strip())

# 关闭浏览器
driver.quit()

注意事项

  • 使用API时,不要频繁请求,避免触发网站的反爬限制;
  • Selenium驱动版本必须和浏览器版本一致,否则会启动失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:22:13