如何从雅虎财经获得完整的股票代码清单?

我已经无休止地搜索了通过http://finance.yahoo.com获取所有雅虎股票代码的完整(并且每日更新)列表的方法。 雅虎拥有全球许多交易所的股票,期货等信息,我想要通过它们获得的所有股票代码的综合列表。我已经尝试过YQL,但是他们有一个“where symbol =(或in)”子句限制,所以我不能从符号中选择*。 所以基本上,一次获取单个符号或几个符号的详细信息很容易,但我似乎无法找到如何获得所有可用代码的列表。 有人可以帮忙吗?     
已邀请:
Yahoo!Finance API有一个不错的C#包装器,可以在http://code.google.com/p/yahoo-finance-managed/找到它。遗憾的是,没有直接下载股票代码列表的方法,但以下内容通过迭代字母组来创建列表:
        AlphabeticIDIndexDownload dl1 = new AlphabeticIDIndexDownload();
        dl1.Settings.TopIndex = null;
        Response<AlphabeticIDIndexResult> resp1 = dl1.Download();

        writeStream.WriteLine("Id|Isin|Name|Exchange|Type|Industry");

        foreach (var alphabeticalIndex in resp1.Result.Items)
        {
            AlphabeticalTopIndex topIndex = (AlphabeticalTopIndex) alphabeticalIndex;
            dl1.Settings.TopIndex = topIndex;
            Response<AlphabeticIDIndexResult> resp2 = dl1.Download();

            foreach (var index in resp2.Result.Items)
            {
                IDSearchDownload dl2 = new IDSearchDownload();
                Response<IDSearchResult> resp3 = dl2.Download(index);


                int i = 0;
                foreach (var item in resp3.Result.Items)
                {
                    writeStream.WriteLine(item.ID + "|" + item.ISIN + "|" + item.Name + "|" + item.Exchange + "|" + item.Type + "|" + item.Industry);
                }

            }
        }
它在约4分钟内给了我一份约75,000份证券的清单。     
我设法通过使用此URL做了类似的事情:   http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.industry%20where%20id%20in%20(select%20industry.id%20from%20yahoo.finance .sectors)及ENV =商店%3A%2F%2Fdatatables.org%2Falltableswithkeys 它使用Yahoo YQL API下载完整的股票代码列表,包括股票名称,股票代码和行业ID。它似乎没有任何种类的股票代码修饰符。例如。对于罗杰斯通信公司,它只下载RCI,而不是RCI-A.TO,RCI-B.TO等。我还没有找到该信息的来源 - 如果有人知道自动下载的方法,我'我喜欢听。此外,很高兴找到一种方法来下载股票代码和交易所交易的某种关系,因为有些交易在多个交易所交易,或者我可能只想查看TSX上的东西或其他东西。     
我有类似的问题。雅虎不提供它,但你可以通过查看nyse.com列表上的document.write语句找到.js文件,它们恰好存储了以给定字母开头的公司列表作为js数组文字。你也可以从nasdaq.com获得漂亮整洁的csv文件: http://www.nasdaq.com/screening/companies-by-name.aspx?letter=0&exchange=nasdaq&render=download(将exchange = nasdaq替换为交换= nyse替换nyse符号)。     
纳斯达克股票清单 ftp://ftp.nasdaqtrader.com/symboldirectory 2个文件nasdaqlisted.txt和otherlisted.txt是|管道分开。这应该给你一个很好的所有股票清单。     
我或许可以帮助(美国和非美国)股票和ETF的股票代码清单。 雅虎提供了一个收益日历,列出了所有宣布的股票 某一天的收入。这包括非美国股票。 例如,今天是:http://biz.yahoo.com/research/earncal/20120710.html URL的最后一部分是您想要的日期(YYYYMMDD格式) 收益日历。你可以循环几天并刮掉符号 在那些日子报告收益的所有股票。 无法保证雅虎拥有报告收益的所有股票的数据, 特别是因为一些股票不再存在(破产,收购等), 但这可能是一个不错的起点。 如果你熟悉
R
,你可以使用 qmao包这样做。 (见这篇文章) 如果您在安装时遇到问题。
ec <- getEarningsCalendar(from="2011-01-01", to="2012-07-01") #this may take a while
s <- unique(ec$Symbol)
length(s)
#[1] 12223
head(s, 20) #look at the first 20 Symbols
# [1] "CVGW"    "ANGO"    "CAMP"    "LNDC"    "MOS"     "NEOG"    "SONC"   
# [8] "TISI"    "SHLM"    "FDO"     "FC"      "JPST.PK" "RECN"    "RELL"   
#[15] "RT"      "UNF"     "WOR"     "WSCI"    "ZEP"     "AEHR"   
这不包括任何ETF,期货,期权,债券,外汇或共同基金。 你可以在这里从雅虎获得ETF列表:http://finance.yahoo.com/etf/browser/mkt 这只显示前20个。您需要在“显示全部”链接的URL 该页面的底部。你可以抓页面找出多少 有ETF,然后构建一个URL。
L <- readLines("http://finance.yahoo.com/etf/browser/mkt")
# Sorry for the ugly regex
n <- gsub("^(\w+)\s?(.*)$", "\1", 
          gsub("(.*)(Showing 1 - 20 of )(.*)", "\3",  
               L[grep("Showing 1 - 20", L)]))
URL <- paste0("http://finance.yahoo.com/etf/browser/mkt?c=0&k=5&f=0&o=d&cs=1&ce=", n)
#http://finance.yahoo.com/etf/browser/mkt?c=0&k=5&f=0&o=d&cs=1&ce=1442
现在,您可以从该页面上的表中提取代码
library(XML)
tbl <- readHTMLTable(URL, stringsAsFactors=FALSE)
dat <- tbl[[tail(grep("Ticker", tbl), 1)]][-1, ]
colnames(dat) <- dat[1, ]
dat <- dat[-1, ]
etfs <- dat$Ticker # All ETF tickers from yahoo
length(etfs)
#[1] 1442
head(etfs)
#[1] "DGAZ" "TAGS" "GASX" "KOLD" "DWTI" "RTSA"
这是我能提供的所有帮助,但你可以做类似的事情 通过抓取这些页面获得他们提供的一些期货 (这些只是美国期货) http://finance.yahoo.com/indices?e=futures, http://finance.yahoo.com/futures?t=energy, http://finance.yahoo.com/futures?t=metals, http://finance.yahoo.com/futures?t=grains, http://finance.yahoo.com/futures?t=livestock, http://finance.yahoo.com/futures?t=softs, http://finance.yahoo.com/futures?t=indices, 而且,对于美国和非美国指数,你可以刮掉这些页面 http://finance.yahoo.com/intlindices?e=americas, http://finance.yahoo.com/intlindices?e=asia, http://finance.yahoo.com/intlindices?e=europe, http://finance.yahoo.com/intlindices?e=africa, http://finance.yahoo.com/indices?e=dow_jones, http://finance.yahoo.com/indices?e=new_york, http://finance.yahoo.com/indices?e=nasdaq, http://finance.yahoo.com/indices?e=sp, http://finance.yahoo.com/indices?e=other, http://finance.yahoo.com/indices?e=treasury, http://finance.yahoo.com/indices?e=commodities     
我已经研究了几天,跟随无尽的线索,接近但不完全是我追求的。 我需要一个简单的“符号,部门,行业”清单。我在Java工作,不想使用任何平台本机代码。 似乎大多数其他数据,如报价等,都很容易获得。 最后,按照建议来看看'finviz.com'。看起来就像票。尝试使用以下内容: http://finviz.com/export.ashx?v=111&t=aapl,cat&o=ticker 它以带有标题行的行,csv样式返回,按行标符号排序。你可以继续添加代码。在代码中,您可以阅读流。或者您可以让浏览器询问您是打开还是保存文件。 http://finviz.com/export.ashx?v=111&&o=ticker 相同的csv样式,但拉出所有可用的符号(很多,跨越全球交易所) 将'export'替换为'screener',数据将显示在浏览器中。 您可以使用更多选项,一个用于网站上的每个筛选元素。 到目前为止,这是获取我无法轻易获得的少量数据的最强大,最方便的编程方式。并且,看起来这个网站很可能只是您可能需要的大部分内容,而不是实时或接近实时的报价。     
雅虎符号/代码/股票的完整列表可在以下网站下载(excel格式)。 http://www.myinvestorshub.com/yahoo_stock_list.php 清单更新至2016年1月: http://investexcel.net/all-yahoo-finance-stock-tickers/     
我有一个解决方法是迭代扇区(当时你可以做...我最近没有测试过)。 当你这样做时,你最终会被阻止,因为YQL每天被限制。 尽可能使用CSV API以避免这种情况。     
我有同样的问题,但我认为我有简单的解决方案(代码来自我的RoR应用程序): 从yahoo.finance.sectors中提取行业ID并将其添加到db:
    select = "select * from yahoo.finance.sectors"
    generate_query select
    @data.each do |data|
      data["industry"].each do |ind|
        unless ind.kind_of?(Array)
          unless ind["id"].nil?
            id = ind["id"].to_i
            if id > 0
              Industry.where(id: id).first_or_create(name: ind["name"]).update_attribute(:name, ind["name"])
            end
          end
        end
      end
    end
使用行业ID提取所有comanies及其符号:
    ids = Industry.all.map{|ind| "'#{ind.id.to_s}'" }.join(",")
    select = "select * from yahoo.finance.industry where id in"
    generate_query select, ids
    @data.each do |ts|
      unless ts.kind_of?(Array) || ts["company"].nil?
        if ts["company"].count == 2 && ts["company"].first[0] == "name"
          t = ts["company"]
          Ticket.find_or_create_by_symbol(symbol: t["symbol"], name: t["name"] ).update_attribute(:name, t["name"])
        else
          ts["company"].each do |t|
            Ticket.find_or_create_by_symbol(symbol: t["symbol"], name: t["name"] ).update_attribute(:name, t["name"])
          end
        end
      end
    end
  end
连接hellper:
def generate_query(select, ids = nil)
    if params[:form] || params[:action] == "sectors" || params[:controller] == "tickets"
      if params[:action] == "sectors" || params[:controller] == "tickets"
        if ids.nil?
          query= select
        else
          query= "#{select} (#{ids})"
        end
      else
        if params[:form][:ids]
          @conditions = params_parse params[:form][:ids]
          query = "#{select} (#{@conditions})"
        end
      end
      yql_execut(query)
    end
  end

  def yql_execut(query)
    # TODO: OAuth ACCESS (http://developer.yahoo.com/yql/guide/authorization.html)
    base_url = "http://query.yahooapis.com/v1/public/yql?&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q="
    dirty_data = JSON.parse(HTTParty.get(base_url +  URI.encode(query)).body)
    if dirty_data["query"]["results"] == nil
      @data, @count, @table_head = nil
    else
      @data = dirty_data["query"]["results"].to_a[0][1].to_a
      @count = dirty_data["query"]["count"]
      if @count == 1
        @table_head = @data.map{|h| h[0].capitalize}
      else
        @table_head = @data.to_a.first.to_a.map{|h| h[0].capitalize}
      end
    end
  end
很抱歉,这是我的项目的第一个测试版本,我需要它非常快。我的应用程序有一些助手变量和其他东西,对不起。但我有疑问:你有很多符号吗?我有5500。     

要回复问题请先登录注册