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

使用Beautiful Soup抓取外汇高低价时遇NoneType问题求助

解决BeautifulSoup find返回NoneType问题,获取外汇对高低价

首先你代码里有个明显的语法错误:attrs = {'class' , 'tabMini tabQuotes'}的写法不对,应该是键值对的字典格式:attrs={'class': 'tabMini tabQuotes'},你用逗号写成集合了,BeautifulSoup无法识别这个参数。

但光改这个还不够,很多网站会拦截不带请求头的爬虫请求,你直接用requests.get(URL)返回的页面内容可能和浏览器看到的不一样,自然找不到目标元素。

下面是修正后的完整解决方案:

修正步骤

  • 给请求添加浏览器UA头,模拟正常用户访问
  • 按层级定位元素,先找外层容器再找子元素,提升稳定性
  • 增加异常判断,避免NoneType报错

完整代码

import requests
from bs4 import BeautifulSoup

URL = "https://www.centralcharts.com/en/6748-aud-nzd/quotes"
# 添加请求头,模拟浏览器访问
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'
}

page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, "html.parser")

# 先定位外层的tabMini-wrapper容器
wrapper = soup.find('div', class_='tabMini-wrapper')
if wrapper:
    # 找到包含高低价的tabQuotes模块
    quotes_tab = wrapper.find('span', class_='tabMini tabQuotes')
    if quotes_tab:
        # 提取高低价对应的value元素
        price_items = quotes_tab.find_all('span', class_='value')
        if len(price_items) >= 2:
            high_price = price_items[0].get_text(strip=True)
            low_price = price_items[1].get_text(strip=True)
            print(f"最高价: {high_price}, 最低价: {low_price}")
        else:
            print("未找到高低价对应的元素")
    else:
        print("未找到tabQuotes模块")
else:
    print("未找到tabMini-wrapper容器")

关键说明

  1. 请求头作用:User-Agent让网站识别为浏览器访问,避免被拦截,确保返回完整的页面内容
  2. 层级定位:先找外层容器再找子元素,比直接定位深层元素更不容易受页面结构小变动影响
  3. 简化写法:用class_='xxx'代替attrs={'class':'xxx'},代码更简洁
  4. 异常判断:每一步find后做存在性检查,方便排查哪一步出了问题

如果还是无法获取内容,可以先打印page.text查看返回的页面内容是否和浏览器F12看到的一致。如果不一致,可能需要处理Cookie,但这个网站加UA基本就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:35:33