Из-за недавней волатильности фондового рынка можно было бы колебаться при входе на рынок. Это может быть возможностью пересмотреть свои инвестиционные стратегии и найти активы, которые могут быть недооценены напуганным рынком. Оценка финансовой отчетности имеет основополагающее значение для инвестиций, основанных на стоимости. Яху! Finance предоставляет легкодоступные финансовые данные о публично торгуемых компаниях, которые можно получить с помощью нескольких простых команд.
В этой статье мы напишем простое программирование на Python для очистки данных финансовой отчетности от Yahoo! Финансируйте с помощью Beautiful Soup и Selenium.
Начнем с финансовых показателей Yahoo! Финансы на примере Microsoft (MSFT):
На странице показаны годовые консолидированные отчеты о прибылях и убытках с 2019 по 2022 год, а также за последние 12 месяцев (TTM) с некоторыми разбивками, скрытыми между строками.
Чтобы очистить все данные через HTML, включая скрытые строки, мы должны сначала отобразить все данные с помощью Selenium. Selenium позволяет нам взаимодействовать с браузером с помощью команд Python. Нам нужно использовать несколько библиотек:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options import time
Во-первых, мы определяем страницу, из которой мы хотим извлечь данные, и открываем ее с помощью веб-драйвера. ChromeDriver необходимо скачать заранее.
url = 'https://finance.yahoo.com/quote/MSFT/financials?p=MSFT' options = Options() options.page_load_strategy = 'eager' browser = webdriver.Chrome(options=options) browser.get(url)
Опция «нетерпеливый» позволяет нам получить доступ к DOM раньше других ресурсов, таких как изображения, что сокращает время загрузки процесса.
Мы определяем кнопку «Развернуть все» и отображаем все скрытые строки с помощью команды click(). Для загрузки страницы установлен период ожидания 2 секунды.
expand_all = browser.find_element(By.XPATH, '//button[contains(@class,"expandPf")]') expand_all.click() time.sleep(2)
Теперь, когда отображаются все строки, мы можем извлечь HTML-код с помощью BeasutifulSoup. Все числовые значения находились под тегом ‹div› с классом «Ta(c)», тогда как имена строк можно было идентифицировать с классом «D(ib)».
from bs4 import BeautifulSoup html_page = BeautifulSoup(browser.page_source, 'html.parser') data = [] for d in html_page.find_all('div', {'class': ['D(ib)', 'Ta(c)']}): data.append(d.string)
Финансовые данные и имена строк были извлечены с некоторыми пустыми значениями и другой несвязанной информацией.
Мы выполняем простую очистку данных, сначала определяя, где наши данные начинаются с («ttm»), а затем извлекаем все данные, прежде чем преобразовать их в фрейм данных для экспорта.
import pandas as pd start = data.index('ttm') data2 = data[start-1:] data2 = list(zip(*[iter(data2)]*6)) pd.DataFrame(data2[0:])
Некоторые имена строк отсутствуют, они не были напрямую написаны в виде текста в HTML. Однако это не должно сильно повлиять на извлекаемые нами данные, поэтому в этом руководстве мы не будем рассматривать его. Аналогичные методы можно использовать для извлечения данных из баланса и отчета о движении денежных средств для финансового анализа компании.