Похоже, проблема в этой строке
stockQuote = page_soup.find('div', {'class': 'My(6px)Pos(r)smartphone_Mt(6px)'}).find('span').text
Имена классов должны быть разделены пробелами, поскольку каждый из них отличается от класса в html.
Решение состоит в том, чтобы разделить их, как вы видите на странице HTML. Это выглядело бы так (два пробела были добавлены к идентификатору класса):
stockQuote = page_soup.find('div', {'class': 'My(6px) Pos(r) smartphone_Mt(6px)'}).find('span').text
Однако, это возвращает число перед красным / зеленым текстом. Так как в этом элементе есть несколько промежутков, вы должны найти их все. Вот как я это сделал:
stockQuote = page_soup.find('div', {'class': 'My(6px) Pos(r) smartphone_Mt(6px)'}).findAllNext('span')
stockQuote = stockQuote[1].text
Функция findAllNext найдет промежутки в этом div. Возвращает около 36, но тот, который вы ищете, является вторым. Затем вы просто получаете текст из него, как и прежде, и он должен вернуть искомое число.
Хотя веб-очистка - хороший инструмент, возможно, стоит заглянуть в yfinance * от Yahoo 1017 * API.