You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

BeautifulSoup爬取报错:NameError: name 'soup' is not defined 求助

问题排查与解决方案

嘿,这个问题一眼就能看出来——就是个典型的变量名拼写失误!咱们一步步来解决:

1. 直接触发报错的核心原因

看你parsePrice函数里的这段代码:

soap=bs4.BeautifulSoup(r.text, 'xml')
price=soup.find('span', {'class': 'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'}).text

你把BeautifulSoup的实例赋值给了soap(字母o),但后面调用查找元素时却写了soup(字母u),Python找不到soup这个未定义的变量,所以抛出了NameError

修复方法:把变量名统一成soup,同时建议把解析器从xml换成更适合HTML页面的html.parser(Python内置,无需额外安装):

soup=bs4.BeautifulSoup(r.text, 'html.parser')

2. 额外优化建议(避免后续踩坑)

  • 增加请求异常处理:网络波动、页面访问限制都可能导致请求失败,加个异常捕获能让程序更健壮:
  • 处理元素找不到的情况:Yahoo Finance的页面结构可能随时更新,要是目标class被修改,程序不会直接崩溃,还能给出提示。

修复后的完整代码

import bs4
import requests
from bs4 import BeautifulSoup

def parsePrice():
    try:
        r=requests.get('https://finance.yahoo.com/quote/FB?p=FB')
        r.raise_for_status()  # 检查请求是否成功返回200状态码
        soup=bs4.BeautifulSoup(r.text, 'html.parser')
        price=soup.find('span', {'class': 'Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'}).text
        return price
    except requests.exceptions.RequestException as e:
        return f"请求出错啦: {str(e)}"
    except AttributeError:
        return "找不到价格元素,可能页面结构已更新"

while True:
    print('The current price is: ')
    print(parsePrice())

内容的提问来源于stack exchange,提问作者The X and D

火山引擎 最新活动