如何从Yahoo Finance获取股票代码的完整列表?[关闭]


100

我无休止地在谷歌上寻找一种通过http://finance.yahoo.com获取所有(每日更新)所有Yahoo股票代码的列表的方法

雅虎拥有有关全球许多交易所的股票,期货等信息,我希望通过它们获得所有股票代码的综合清单。我尝试过YQL,但是它们具有“ where symbol =(或in)”子句限制,因此我无法从符号中选择*。

因此,基本上,一次获得一个或多个符号的详细信息很容易,但我似乎无法找出如何获取所有可用行情自动收录器的列表。

有人可以帮忙吗?


8
你有喜乐吗?我确实找到了这个:eoddata.com/symbols.aspx
Codek 2012年

谢谢Codek :-)不,我没有找到它,而任务是找到Yahoos符号列表,而不是其他任何人,所以很遗憾,不能使用Eoddatas。再次感谢,并度过了一个愉快的周末:-)
rassom 2012年

2
好的,没有问题。我只想要LSE符号,因此以上内容对我有帮助-我相信交易所内的符号在yahoo / lse / google财务等各个方面都是一致的-除了yahoo末尾带有.L,在google中具有LON之外。多么可笑的是所有价格数据都可以得到,但是我没有得到的交易品种列表却真是太荒谬了!
Codek 2012年

现在,您可以使用包含98k个符号的quandl中的元数据。请注意,您必须将quandl符号解码回原始的yahoo符号。INDEX_得到^和_得到。quandl.com/data/YAHOO/metadata
KIC

3
一个Python程序,它可以为你做的:github.com/Benny-/Yahoo-ticker-symbol-downloader
安德烈·佩纳

Answers:


13

http://code.google.com/p/yahoo-finance-managed/上有一个Yahoo.Finance API的不错的C#包装器,它将带您到达那里。不幸的是,没有直接的方法可以下载股票行情列表,但是下面的代码通过迭代字母顺序的组来创建该列表:

        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种证券的清单。


24
对于我们中不使用C#的用户,您可以运行此代码并将输出的副本放在pastebin上吗?
Jeroen

1
看来按字母顺序排列的结果并不完整。许多符号错过了。
liang

我尝试运行此代码,但不幸的是它没有返回任何结果。有任何想法吗?
lionheart 2014年

3
我认为这不再有效。提到的包装器API向biz.yahoo.com/i发送了一个请求,该请求似乎已更改(重定向到finance.yahoo.com/q),并且不再包含XPath建议的表。
richardr 2014年

45

我有一个类似的问题。yahoo不提供它,但是您可以通过浏览nyse.com列表上的document.write语句并找到.js文件(恰好它们存储以给定字母开头的公司列表作为js数组的位置)的.js文件来获得它。文字。您还可以从nasdaq.com上获得整洁的csv文件:http : //www.nasdaq.com/screening/companies-by-name.aspx? letter =0&exchange=nasdaq& render = download (用exchange = nyse 替换exchange = nasdaq对于nyse符号)。


2
谢谢伊恩。我需要Yahoo的清单,因为他们在美国以外也有股票行情,因此不幸的是纳斯达克还不够。
rassom 2011年

5
很好,谢谢。您也可以将交换替换为“ all”,以获得所有三个索引的报价。
达林·彼得森

该链接指向带有此类列表的网站,但我看不到下载csv的选项
hipoglucido

45

我设法通过使用以下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 = store%3A%2F%2Fdatatables.org%2Falltableswithkeys

它使用Yahoo YQL API下载股票代码的完整列表,包括股票名称,股票代码和行业ID。它似乎没有的是任何一种股票代码修饰符。例如,对于Rogers Communications Inc,它仅下载RCI,而不下载RCI-A.TO,RCI-B.TO等。我还没有找到该信息的来源-如果有人知道自动下载该信息的方法,我想听听。另外,最好找到一种下载股票代码和它所交易的交易所之间的某种关系的方法,因为一些交易是在多个交易所进行的,或者也许我只想看一下TSX上的东西。


9
或者,如果json更
适合

1
好一个。原始YQL:从yahoo.finance.industry中的id中选择*(从yahoo.finance.sectors中选择select industry.id)
David Gilbertson

1
我相信通过上面的查询最终来自从这个URL可达的链路返回的数据biz.yahoo.com/ic/ind_index.html(这些额外的网址,也可能是有用的:biz.yahoo.com/p/s_conameu.htmlBIZ .yahoo.com / p / sum_conameu.html
richardr

13
这似乎并没有被工作了:(
安德烈·佩纳

1
我认为表“ yahoo.finance.sectors”已被删除。但是仍然有数据来源-仅是网页。(事实上​​,如果您在developer.yahoo.com/yql/console的YQL控制台上选择了“从yahoo.finance.sectors中选择* ,则返回中嵌入的是指向该网页的链接-biz.yahoo.com/ic /ind_index.html。)因此,您需要编写一些代码来获取该页面,然后从中解析出数据。它会为您提供扇区,这些扇区中的行业以及行业ID的列表(您可以使用行业ID的第一位数字作为行业ID)。
史蒂夫·格林2015年

24

纳斯达克股票列表 ftp://ftp.nasdaqtrader.com/symboldirectory

这两个文件nasdaqlisted.txt和otherlisted.txt是| 管分隔。那应该给您所有股票的好清单。


对于像我这样的懒人:ftp.nasdaqtrader.com/SymbolDirectory ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt ftp.nasdaqtrader.com/SymbolDirectory/otherlisted.txt
1mike12

nasdaqtraded.txt是您需要的,这是两个列表的组合。
蓟结

14

我可能能够为(美国和非美国)股票以及ETF提供股票代码的列表帮助。

雅虎提供了一个“收入日历”,其中列出了宣布某一天的收入的所有股票。这包括非美国股票。

例如,今天是今天:http : //biz.yahoo.com/research/earncal/20120710.html

网址的最后一部分是您想要收入日历的日期(采用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,期货,期权,债券,外汇或共同基金。

您可以从以下网站从yahoo获取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=futureshttp://finance.yahoo.com/futures?t=energyhttp://finance.yahoo.com/futures?t=metalsHTTP: //finance.yahoo.com/futures?t=grainshttp://finance.yahoo.com/futures?t=livestockhttp://finance.yahoo.com/futures?t=softsHTTP:// finance.yahoo.com/futures?t=indices

而且,对于美国和非美国指数,您可以抓取这些页面

http://finance.yahoo.com/intlindices?e=americashttp://finance.yahoo.com/intlindices?e=asiahttp://finance.yahoo.com/intlindices?e=europeHTTP: //finance.yahoo.com/intlindices?e=africahttp://finance.yahoo.com/indices?e=dow_joneshttp://finance.yahoo.com/indices?e=new_yorkHTTP:// finance.yahoo.com/indices?e=nasdaqhttp://finance.yahoo.com/indices?e=sphttp://finance.yahoo.com/indices?e=otherHTTP://融资。 yahoo.com/indices?e=treasuryhttp://finance.yahoo.com/indices?e=commodities


2
如您所写,我可能不会以这种方式获得所有的报价,而对于我的项目而言,要么全部(完整列表),要么无关紧要。但是,非常感谢您提供详尽的答案,GSee。赞赏!祝您有美好的一天:-)
索姆(Rassom)2012年

8

我一直在研究这几天,追寻着无数的线索,这些线索与我所追求的相近,但并不完全相同。

我需要一个简单的“符号,行业,行业”列表。我正在使用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样式,但是提取了所有可用的符号(很多,遍及全球交易所)

将“导出”替换为“筛选器”,数据将显示在浏览器中。

您可以使用更多选项,该选项适用于网站上的每个筛选器元素。

到目前为止,这是获取我以前无法轻易获得的少量数据的最强大,最方便的编程方式。而且,看起来该网站很可能是您除了实时报价或近实时报价以外的大多数其他需求的唯一来源。


4
我加载的每个网址都重定向到finviz.com/elite.ashx
PUG

我必须订阅Elite交易者服务,但这是值得的。谢谢。
vlmercado

7

雅虎符号/股票/股票的完整列表可从以下网站下载(excel格式)。http://www.myinvestorshub.com/yahoo_stock_list.php

列表更新至2016年1月:http//investexcel.net/all-yahoo-finance-stock-tickers/


3
该列表的最新情况?
Jeroen

1
此列表似乎不完整,例如,GOOG不在列表中。
user592419 2014年

该列表截取了3000个符号。它是按字母顺序排列的,因此对于美国来说,最终落入FDEF。其他少于3000个符号的市场似乎表现更好,例如香港。就是说,我不知道它有多完整/最新。
惊人的2014年

2
似乎不完整且无法维护。
Jens A. Koch 2014年

链接不再有效
toshiro92 '16

1

为此,我有一个解决方法是遍历各个扇区(在您可以做的时候...我最近还没有测试过)。

这样一来,最终您最终就会受阻,因为YQL每天都会受到限制。

尽可能避免使用CSV API。


1

我有同样的问题,但我想我有一个简单的解决方案(代码来自我的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的符号的符号:

    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

连接方式:

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。


5500可能只是美国股票代码(雅虎财务涵盖的范围更广-在全球范围内-如您所接受的答案中所示,他得到了大约75,000个符号!:) ...尚未将接受的.NET方式转换为Ruby。 (我也在使用RoR),因此,如果您可以使用它,即找到更多符号,请告诉我。谢谢!:-)
rassom 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.