是否有用于检索S& P 500组件符号的免费API?

时间:2012-12-07 18:56:11

标签: web-services api rest finance

某种免费的REST API是理想的,但通常是有任何免费的API或Web服务或CSV文件(不在密码提示后面)或任何可以查询以获取当前列表的文件S& P 500指数成分?

我看过S& P的网站本身(http://www.standardandpoors.com),通过Yahoo Finance的API和Markit on demand(http://dev.markitondemand.com/),但还没有找到任何东西。

3 个答案:

答案 0 :(得分:6)

也有类似的需求。您可以使用Wikipedia API或解析html来获取S& P 500 http://en.wikipedia.org/wiki/List_of_S%26P_500_companies

中的符号列表

您现在可以通过

安装和使用模块
pip install finsymbols

我目前通过维基百科获取符号列表。它不是休息,但可以很容易地成为一个休息API。它是用python编写的

>>import sys
>>sys.path.append('/home/skillachie/Desktop/')
>>import finsymbols

sp500 = finsymbols.get_sp500_symbols()

pprint.pprint(sp500)

{'company': u'Xcel Energy Inc',
  'headquaters': u'Minneapolis, Minnesota',
  'industry': u'Multi-Utilities & Unregulated Power',
  'sector': u'Utilities',
  'symbol': u'XEL'},
 {'company': u'Xerox Corp.',
  'headquaters': u'Norwalk, Connecticut',
  'industry': u'IT Consulting & Services',
  'sector': u'Information Technology',
  'symbol': u'XRX'},
 {'company': u'Xilinx Inc',
  'headquaters': u'San Jose, California',
  'industry': u'Semiconductors',
  'sector': u'Information Technology',
  'symbol': u'XLNX'},
 {'company': u'XL Capital',
  'headquaters': u'Hamilton, Bermuda',
  'industry': u'Property & Casualty Insurance',
  'sector': u'Financials',
  'symbol': u'XL'},

如果您有兴趣,可以在此处获取更多信息http://skillachie.github.io/finsymbols/

答案 1 :(得分:2)

使用python,你可以尝试我刚写的这个片段(有点难看,但是有效)。 (它实际上返回502代码。它是正确的)

 from urllib import request
    from bs4 import BeautifulSoup
    import datetime
    import dateutil.relativedelta as dr
    import pandas as pd


    def get_constituents():
        # URL request, URL opener, read content
        req = request.Request('http://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
        opener = request.urlopen(req)
        content = opener.read().decode() # Convert bytes to UTF-8

        soup = BeautifulSoup(content)
        tables = soup.find_all('table') # HTML table we actually need is tables[0] 

        external_class = tables[0].findAll('a', {'class':'external text'})

        tickers = []

        for ext in external_class:
            if not 'reports' in ext:
                tickers.append(ext.string)

        return tickers

答案 2 :(得分:1)

我找到了http://finviz.com/export.ashx?v=152&f=idx_sp500&ft=1&ta=1&p=d&r=1&c=1

: - )

但我还没有找到Finviz API文档。

: - (

彭博似乎有一个open api。如果你四处寻找,可能会找到你需要的数据。