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

爬取谷歌加密货币价格时遇AttributeError: 'NoneType'无'find'属性错误

解决谷歌搜索加密货币汇率爬取失败的问题

你的代码出现错误主要有两个核心原因:

  • 谷歌搜索页面的CSS类名是动态生成的,会不定期更新,硬编码card-section PZPZlf、pclqee这类类名,大概率会出现找不到元素的情况
  • 未设置请求头模拟浏览器,谷歌会识别出爬虫身份,返回的页面内容和浏览器看到的不一致

修改后的代码

from bs4 import BeautifulSoup
import requests

def cryptoPrice(crypto):
    url = f"https://www.google.com/search?q={crypto}+price"
    # 模拟浏览器请求头,可替换成你自己浏览器的User-Agent
    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"
    }
    
    req = requests.get(url, headers=headers)
    req.raise_for_status()  # 主动抛出请求错误
    
    soupObject = BeautifulSoup(req.text, 'html.parser')
    # 优先找带有data-value属性的span(谷歌价格模块常用这个属性存储数值)
    price_element = soupObject.find("span", {"data-value": True})
    if not price_element:
        # 备选方案:通过价格文本特征定位
        price_element = soupObject.find("span", string=lambda text: text and "$" in text)
    
    return price_element.text if price_element else "无法获取价格"

price = cryptoPrice('bitcoin')
print(price)

关键优化点

  • 请求头模拟:通过User-Agent让请求伪装成浏览器访问,避免被谷歌反爬拦截
  • 稳定元素定位:放弃依赖动态类名,改用data-value属性或价格文本特征定位元素,适配谷歌页面更新
  • 异常处理:添加req.raise_for_status()捕获请求错误,同时判断元素是否存在,避免直接抛出AttributeError

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:29