Получение списка акций, входящих в индекс S&P 500
Рассмотрим два способа, которые позволяют программно получить список тикеров акций, входящих в индекс S&P 500.
В первом случае будем использовать специально для этого предназначенный пакет finsymbols
,
а во втором случае сделаем всё сами, выполнив разбор страницы Википедии.
Пакет finsymbols
Пакет finsymbols
позволяет в программе, написанной на языке Python, получить список акций, которые торгуются на биржах NASDAQ, AMEX и NYSE. Для этого он определяет соответствующие функции get_amex_symbols()
, get_nyse_symbols()
и get_nasdaq_symbols()
. Кроме того, имеется функция get_sp500_symbols()
, возвращающая список акций, входящих в индекс S&P 500.
Для установки пакета в Linux надо выполнить в терминале команду:
sudo pip install finsymbols
В консольном окне Microsoft Windows используется та же команда, только без sudo
:
pip install finsymbols
Для проверки работы пакета можно выполнить простую программу на языке Python:
import finsymbols
import pprint # для печати сложных структур данных
sp500 = finsymbols.get_sp500_symbols()
pprint.pprint(sp500[:2]) # вывели 2 первых элемента
Здесь мы для примера вывели информацию о первых двух акциях, входящих в индекс S&P500:
[{'company': '3M Co.',
'headquaters': 'St Paul, Minnesota',
'industry': 'Industrial Conglomerates',
'sector': 'Industrials',
'symbol': 'MMM'},
{'company': 'Abbott Laboratories',
'headquaters': 'North Chicago, Illinois',
'industry': 'Health Care Equipment & Services',
'sector': 'Health Care',
'symbol': 'ABT'}]
Разбор страницы Википедии
В англоязычной Википедии имеется страница List of S&P 500 companies, на которой перечислены все компании, акции которых на текущий момент учитываются при расчёте индекса S&P500.
Чтобы прочитать Web-страницу, будем использовать стандартную библиотеку urllib.
Приведём здесь пример для Python 3:
import urllib.request
url = "http://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
response = urllib.request.urlopen(url)
html = response.read()
Для разбора (парсинга) документов в формате HTML и XML в языке Python 2 или 3 имеется пакет Beautiful Soup:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
# Найдём таблицу:
table = soup.find('table', {'class': 'wikitable sortable'})
# Словарь для тикеров, сгруппированных по секторам экономики:
tickers = dict()
for r in table.findAll('tr'): # Цикл по строкам таблицы.
col = r.findAll('td') # Колонки таблицы.
if len(col)>0:
# В 4-й колонке таблицы - название сектора экономики:
sector = str(col[3].string.strip()).lower().replace(' ', '_')
# В 1-й колонке таблицы - тикер акции:
ticker = str(col[0].string.strip())
# Если пока нет такого сектора, добавляем к словарю новый список для тикеров:
if sector not in tickers:
tickers[sector] = list()
# Добавляем тикер акции в список соответствующего сектора:
tickers[sector].append(ticker)
Посмотрим, что получилось:
import pprint
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(tickers)
Результат (для наглядности мы заменили длинные списки многоточием):
{ 'consumer_discretionary': [ 'AAP',
'AMZN',
'AN',
'AZO',
...
'consumer_staples': [ 'MO',
'ADM',
'BF-B',
...
...
'telecommunications_services': ['T', 'CTL', 'FTR', 'LVLT', 'VZ'],
'utilities': [ 'AES',
'GAS',
'AEE',
...
'WEC',
'XEL']}
Теперь полученный список тикеров можно использовать, например, для загрузки котировок.
Тетрадка IPython Notebook для этого примера.
Теги: Python