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

如何用BeautifulSoup获取网页所有货币对标签而非仅默认显示项

解决方法:抓取所有货币对的动态加载数据

你当前的代码只能拿到默认加载的美元相关货币对,原因是该网站的非美元货币对是动态加载的——初始页面仅渲染美元作为基础货币的配对数据,其余货币对需要切换基础货币时通过API接口获取,直接请求主页面无法得到完整内容。

以下是具体实现步骤和代码:

1. 先抓取所有基础货币代码

页面顶部的货币选择器包含了所有可切换的基础货币(如EUR、GBP、JPY等),先提取这些货币代码:

import requests
from bs4 import BeautifulSoup

# 自定义请求头,避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

# 获取主页面,提取所有基础货币代码
main_url = "https://markets.businessinsider.com/currencies"
response = requests.get(main_url, headers=headers)
response.raise_for_status()
soup = BeautifulSoup(response.content, "html.parser")

base_currencies = []
# 定位货币选择器的下拉菜单
currency_dropdown = soup.find("div", class_="currency-selector__dropdown")
if currency_dropdown:
    # 提取所有货币选项的data-base属性(即货币代码)
    currency_items = currency_dropdown.find_all("a", class_="dropdown__item")
    base_currencies = [item.get("data-base") for item in currency_items if item.get("data-base")]
# 去重,避免重复请求
base_currencies = list(set(base_currencies))

2. 循环请求API获取所有货币对

每个基础货币对应一个API接口,返回该货币下的所有配对数据(HTML片段),解析后提取货币标签:

all_currency_pairs = []
# API接口模板,替换{}为基础货币代码
api_template = "https://markets.businessinsider.com/currencies/get_all_currency_pairs?base={}"

for base in base_currencies:
    api_url = api_template.format(base)
    api_response = requests.get(api_url, headers=headers)
    api_response.raise_for_status()
    # 解析API返回的HTML片段
    api_soup = BeautifulSoup(api_response.content, "html.parser")
    # 提取货币对标签(和你原代码的选择器一致)
    currency_tags = api_soup.find_all("td", class_="table__td bold")
    # 提取文本并加入总列表
    for tag in currency_tags:
        pair_text = tag.get_text(strip=True)
        all_currency_pairs.append(pair_text)

# 去重,排除反向重复的货币对(如USD/EUR和EUR/USD)
all_currency_pairs = list(set(all_currency_pairs))

# 打印所有货币对
for pair in all_currency_pairs:
    print(pair)

关键说明

  • 该网站通过切换基础货币触发API请求,返回对应货币对的表格HTML,而非直接在主页面加载所有数据
  • 添加自定义User-Agent是为了绕过基础反爬机制,避免请求被拦截
  • 最后去重是因为不同基础货币下会出现反向重复的货币对(如USD/GBP和GBP/USD),可根据需求决定是否保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:25