Научитесь парсить финансовые данные с помощью Python
Опубликовано: 2019-04-26Фондовый рынок — это огромная база данных с миллионами записей, которые обновляются каждую секунду. Хотя многие компании предоставляют финансовые данные компаний, обычно это делается через API (интерфейс прикладного программирования). И, как вы уже догадались, эти API никогда не бывают бесплатными. Yahoo Finance является надежным источником данных фондового рынка и имеет платный API. Мы пошагово расскажем вам, как очистить данные Yahoo Finance с помощью Python.
Зачем сканировать данные из Yahoo Finance?
Если вам нужны бесплатные и чистые финансовые данные из надежного источника, Yahoo Finance — ваш лучший выбор. Веб-страницы с профилями компаний имеют единую структуру, что упрощает парсинг python. Если вы напишете сценарий для обхода данных с финансовой страницы Microsoft, тот же сценарий можно будет использовать для обхода данных с финансовой страницы Apple.
Как получить финансовые данные из Интернета с помощью Python?
Для установки и начала работы вы можете обратиться к основным шагам из этой статьи о очистке данных python, где мы обсуждали, как сканировать данные с ведущего портала бронирования отелей. После того, как вы установили все зависимости вместе с редактором кода Atom, давайте начнем с очистки Yahoo Finance с помощью Python.
1. Начните с кода для очистки с помощью Python
После того, как этапы установки и настройки завершены, мы можем перейти прямо к коду и запустить Yahoo Finance Scraping. Код приведен ниже, и его можно запустить, используя только команду Python.

Вы можете запустить код так, как показано выше. При появлении запроса просто введите URL-адрес компании, финансовую сводку которой вы хотите проверить. Мы использовали ссылку для Microsoft.
[язык кода = «питон»]
#!/usr/бин/питон
# -*- кодировка: utf-8 -*-
импортировать urllib.request
импортировать urllib.parse
импортировать urllib.error
из bs4 импортировать BeautifulSoup
импорт SSL
импортировать json
импортировать
импорт ОС
из запроса импорта urllib.request, urlopen
# Для игнорирования ошибок сертификата SSL
ctx = ssl.create_default_context()
ctx.check_hostname = Ложь
ctx.verify_mode = ssl.CERT_NONE
# Ввод от пользователя
url = input('Введите URL-адрес Yahoo Finance Company- ')
# Заставьте веб-сайт поверить, что вы заходите на него с помощью браузера Mozilla
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
веб-страница = urlopen(req).read()
# Создание объекта BeautifulSoup HTML-страницы для удобного извлечения данных.
суп = BeautifulSoup (веб-страница, 'html.parser')
html = суп.prettify('utf-8')
компания_json = {}
другие_детали = {}
для span в супе.findAll('span',
attrs={'class': 'Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'
}):
company_json['PRESENT_VALUE'] = span.text.strip()
для div в супе.findAll('div', attrs={'class': 'D(ib) Va(t)'}):
для диапазона в div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'PREV_CLOSE-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['PREV_CLOSE'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'OPEN-value'}):
для диапазона в td.findAll('span', recursive=False):
other_details['OPEN'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'BID-value'}):
для диапазона в td.findAll('span', recursive=False):
other_details['BID'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'ASK-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['ASK'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'DAYS_RANGE-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['DAYS_RANGE'] = span.text.strip()
для td в супе.findAll('td',
attrs={'data-test': 'FIFTY_TWO_WK_RANGE-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'TD_VOLUME-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['TD_VOLUME'] = span.text.strip()
для td в супе.findAll('td',
attrs={'data-test': 'AVERAGE_VOLUME_3MONTH-значение'
}):
для диапазона в td.findAll('span', recursive=False):
other_details['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'MARKET_CAP-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['MARKET_CAP'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
для диапазона в td.findAll('span', recursive=False):
other_details['BETA_3Y'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'PE_RATIO-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['PE_RATIO'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
для диапазона в td.findAll('span', recursive=False):
other_details['EPS_RATIO'] = span.text.strip()
для td в супе.findAll('td', attrs={'data-test': 'EARNINGS_DATE-значение'
}):
other_details['EARNINGS_DATE'] = []
для диапазона в td.findAll('span', recursive=False):
other_details['EARNINGS_DATE'].append(span.text.strip())
для td в супе.findAll('td',
attrs={'data-test': 'DIVIDEND_AND_YIELD-значение'}):
other_details['DIVIDEND_AND_YIELD'] = td.text.strip()
для td в супе.findAll('td',
attrs={'data-test': 'EX_DIVIDEND_DATE-значение'}):
для диапазона в td.findAll('span', recursive=False):
other_details['EX_DIVIDEND_DATE'] = span.text.strip()
для td в супе.findAll('td',
attrs={'data-test': 'ONE_YEAR_TARGET_PRICE-значение'
}):
для диапазона в td.findAll('span', recursive=False):
other_details['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = другие_детали
с open('data.json', 'w') в качестве выходного файла:
json.dump (company_json, внешний файл, отступ = 4)
печать company_json
с open('output_file.html', 'wb') в виде файла:
файл.записать(html)
print '———-Извлечение данных завершено. Проверьте файл json.———-'

[/код]
Как только вы запустите код и введете URL-адрес компании, вы увидите json, напечатанный на вашем терминале. Этот json также будет сохранен в файле с именем «data.json» в вашей папке. Для Microsoft мы получили следующий JSON.
[язык кода = «питон»]
{
«НАСТОЯЩИЙ_РОСТ»: «+1,31 (+0,67%)»,
«НАСТОЯЩЕЕ ЗНАЧЕНИЕ»: «197,00»,
«PREV_CLOSE»: «195,69»,
«ОТКРЫТО»: «196,45»,
«ПРЕДЛОЖЕНИЕ»: «196,89 x 900»,
«СПРОСИТЬ»: «197,00 x 1400»,
«TD_VOLUME»: «18 526 644»,
"AVERAGE_VOLUME_3MONTH": "29 962 082",
«MARKET_CAP»: «928,91 млрд»,
«БЕТА_3Г»: «0,91»,
«PE_RATIO»: «16,25»,
«EPS_RATIO»: «12,12»,
"EARNINGS_DATE": [
«30 апреля 2019 г.»
],
«DIVIDEND_AND_YIELD»: «2,92 (1,50%)»,
"EX_DIVIDEND_DATE": "2019-02-08",
«ONE_YEAR_TARGET_PRICE»: «190,94»
}
[/код]
Для Apple, которая в последнее время неоднократно терпела убытки, JSON выглядел так.
[язык кода = «питон»]
{
«НАСТОЯЩЕЕ ЗНАЧЕНИЕ»: «198,87»,
«НАСТОЯЩИЙ_РОСТ»: «-0,08 (-0,04%)»,
"ДРУГИЕ ДЕТАЛИ": {
«PREV_CLOSE»: «198,95»,
«ОТКРЫТО»: «199,20»,
«ПРЕДЛОЖЕНИЕ»: «198,91 x 800»,
«СПРОСИТЬ»: «198,99 x 1000»,
«TD_VOLUME»: «27 760 668»,
"AVERAGE_VOLUME_3MONTH": "28 641 896",
«MARKET_CAP»: «937.728B»,
«БЕТА_3Г»: «0,91»,
«PE_RATIO»: «16,41»,
«EPS_RATIO»: «12,12»,
"EARNINGS_DATE": [
«30 апреля 2019 г.»
],
«DIVIDEND_AND_YIELD»: «2,92 (1,50%)»,
"EX_DIVIDEND_DATE": "2019-02-08",
«ONE_YEAR_TARGET_PRICE»: «193,12»
}
}
[/код]
Вы можете сделать то же самое с любым количеством компаний, которые вы хотите, и так часто, как вы хотите оставаться в курсе.
2. Объяснение кода сканера
Как и в предыдущих кодах парсинга веб-страниц, в этом также мы сначала получили весь HTML-файл. Исходя из этого, мы определили конкретные теги (с определенными классами), которые содержали нужные нам данные. Этот шаг был выполнен вручную для одной страницы сведений о компании. Как только были определены конкретные теги и соответствующие им классы, мы использовали красивый суп, чтобы получить эти теги, используя наш код.
Затем из каждого из этих тегов мы скопировали необходимые данные в переменную с именем company_json. Это json, который мы в конечном итоге записали в файл типа JSON с именем data.json. Вы можете видеть, что мы также сохранили очищенный HTML-код в файл с именем output_file.html в вашей локальной памяти. Это сделано для того, чтобы вы могли самостоятельно проанализировать HTML-страницу и придумать другие методы очистки данных на Python для сканирования большего количества данных.
3. Некоторые важные данные, которые мы получили
- PREV_CLOSE: относится к цене закрытия акции в предыдущий торговый день. Стоимость акций предыдущего дня относится только к последней цене закрытия в день, когда фондовый рынок был открыт (не в праздничные дни).
- ОТКРЫТИЕ: Цена открытия, также сокращенно называемая Открытой, является начальной ценой акции в торговый день. Например, ценой открытия любого фондового рынка на Нью-Йоркской фондовой бирже (NYSE) будет его цена в 9:30 утра по восточному времени.
- BID & ASK: обе цены являются котировками одной акции. Бид относится к цене, которую покупатели готовы заплатить за него, тогда как аск — это то, за что продавцы готовы его продать. Множитель относится к количеству акций, ожидающих продажи по соответствующим ценам.
- TD_VOLUME: это просто количество акций, которые перешли из рук в руки в течение дня.
- PE_RATIO: вероятно, самый важный фактор, на который обращают внимание инвесторы, он рассчитывается путем деления текущей рыночной цены акций компании на прибыль на акцию компании. Проще говоря, это сумма денег, которую человек готов заплатить за каждую рупию прибыли компании.
Причина, по которой мы объяснили некоторые важные данные, заключается в том, что мы хотели, чтобы вы знали, насколько глубоко вы можете погрузиться в финансовые показатели компании, просто соскребая данные с ее финансовой страницы Yahoo.
Какие данные вы можете сканировать из Yahoo Finance?
Вы сможете сканировать различные точки данных с помощью этого парсера Python. Текущая стоимость и текущий процент роста или падения имеют первостепенное значение. Другие точки данных, если рассматривать их вместе, представляют лучшую картину и помогают решить, будет ли инвестирование в акции компании хорошей идеей или нет. Однако просмотр моментального снимка данных может оказаться не слишком эффективным. Очистка данных через регулярные промежутки времени и использование большого набора данных для прогнозирования будущих цен на акции могут оказаться более полезными в долгосрочной перспективе.
Какие еще финансовые данные вы можете сканировать?
Финансовые данные, которые мы собрали, взяты со сводной страницы компании в Yahoo Finance. У каждой компании также есть страница с диаграммами, где вы можете увидеть данные об акциях за период до пяти лет. Хотя данные не совсем хорошо структурированы, возможность их сканирования может дать вам очень хорошее представление об исторической эффективности акций компании.
Страница статистики дает вам более тридцати различных точек данных, помимо тех, которые мы зафиксировали. Они представлены в структурированном формате и могут быть извлечены с помощью кода, аналогичного предоставленному нами.
Исторические данные содержат данные со страницы диаграммы, но в формате, похожем на CSV — вы можете легко извлечь данные и сохранить их в CSV. Другие страницы, такие как профиль, финансы, анализ, опционы, держатели и устойчивость, могут дать вам хорошую оценку того, как акции компании будут работать по сравнению с ее конкурентами.
Примеры использования Yahoo Finance Data
Вы можете использовать исторические данные для прогнозирования цен на акции или создать приложение, которое использует регулярно обновляемые данные из вашего механизма очистки для предоставления обновлений пользователям. Вы можете порекомендовать, когда следует продать свои акции, а когда купить больше — возможности безграничны!
Если у вас небольшая команда и вы не можете решить, с чего начать парсинг веб-страниц, вы можете воспользоваться помощью преданной и опытной команды парсинга веб-страниц, такой как PromptCloud. Наша панель сбора требований к веб-скрапингу делает отправку требований, получение предложения и, наконец, получение данных в формате plug and play простым и понятным процессом.
Нужна помощь с извлечением веб-данных?
Получите чистые и готовые к использованию данные с веб-сайтов для бизнес-приложений с помощью наших сервисов парсинга.
Ой! Мы не смогли найти вашу форму.
Отказ от ответственности: код, представленный в этом руководстве, предназначен только для учебных целей. Мы не несем ответственности за то, как он используется, и не берем на себя никакой ответственности за любое вредоносное использование исходного кода.
