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

爬取汇率数据生成DataFrame导出CSV时如何避免重复行?

解决Python导出美元汇率CSV时的重复行问题

问题根源

你代码里的for row in soup是遍历BeautifulSoup解析后的所有DOM元素,每次循环都把同一个汇率和涨跌幅数据添加到列表里,自然会生成大量重复行(所有行内容完全一致)。

直接避免重复的修改方案

不需要遍历soup,因为你已经提取到了唯一的汇率和涨跌幅值,直接构造单条数据即可:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.cnbc.com/quotes/.DXY'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

valores = soup.find('div', class_='QuoteStrip-lastPriceStripContainer')
cotacao = valores.find('span')

variacoes = soup.find('span', class_='QuoteStrip-changeDown')
variacao = variacoes.find('span')

print(cotacao.text)
print(variacao.text)

# 直接构造单条数据,无需循环
cotacao_dolar = [{
    'Cambio': cotacao.text,
    'Variacao': variacao.text
}]

df = pd.DataFrame(cotacao_dolar)
df.to_csv(r'C:\teste\cotacao_dolar.csv', index=False)  # 加上index=False避免导出不必要的索引列

额外优化建议

  • 添加index=False参数,避免CSV中多出无意义的索引列
  • 增加异常处理并兼容涨跌两种状态(涨跌幅元素的class会随涨跌变化):
# 优化后的异常处理与多状态兼容
try:
    valores = soup.find('div', class_='QuoteStrip-lastPriceStripContainer')
    cotacao = valores.find('span').text if valores else 'N/A'
    
    # 同时查找下跌和上涨的class
    variacoes = soup.find('span', class_='QuoteStrip-changeDown') or soup.find('span', class_='QuoteStrip-changeUp')
    variacao = variacoes.find('span').text if variacoes else 'N/A'
except Exception as e:
    print(f"提取数据出错: {e}")
    cotacao = 'N/A'
    variacao = 'N/A'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:52:13