Вы пытаетесь проанализировать страницу, которая отображается в коде HTML браузером. Если вы откроете исходный код страницы - вы увидите, что у него есть один большой скрипт-тег со всеми данными для рендеринга.
У вас есть два способа справиться с этой ситуацией:
1. Рендеринг страницы и запуск XPathes в нем.
Речь идет об открытии страницы в браузере, получении от нее отрендеренного DOM и запуске XPath.
Лучший инструмент для использования в этом случае - Селен с каким-то веб-драйвером (используется для управления браузером с помощью python кода)
Пример кода для вашей ситуации:
from selenium import webdriver
driver = webdriver.Chrome()
ticker = 'TSLA'
url = 'https://finance.yahoo.com/quote/'+str(ticker)+'?p='+str(ticker)
driver.get(url)
xpath = '//*[@id="rec-by-symbol"]/table/tbody/tr[1]/td[1]/a'
found_nodes = driver.find_elements_by_xpath(xpath)
for node in found_nodes:
print(node.text)
driver.close()
driver.quit()
Но вам нужно установить селен и скачать подходящий драйвер. Для Chrome, который я использовал в качестве примера, это будет хромированный драйвер (вы можете получить его здесь: https://chromedriver.chromium.org/):
pip install selenium
2. Разобрать скрипт в Object (особенно узел root .App.main) и работать с ним
Это более сложный способ, но без необходимости браузера.
Рабочий процесс:
a. Download page via requests;
b. Get script with target data (via regular expressions);
c. load root.App.main as json Object (json.loads method);
d. Find necessary nodes in Object.
Я не буду предоставлять никакого кода для этого случая, потому что он требует написать почти весь парсер для вашей задачи.