如何通过输入行业名称来获取股票代码列表

Posted

技术标签:

【中文标题】如何通过输入行业名称来获取股票代码列表【英文标题】:how to get a list of stock tickers by entering a sector name 【发布时间】:2021-03-15 01:05:39 【问题描述】:

我正在尝试编写代码以在输入行业名称时返回股票代码列表。

例如,MSFT 在 yfinance 的技术部门,我想要属于该特定部门的其余公司。

import yfinance as yf

msft= yf.Ticker("MSFT")
print(msft.info['sector'])

此代码将返回“技术”,如何获取数据框 包含其他股票。

是否有可能获得比“技术”更具体的“通信”等更具体的部门类别?

【问题讨论】:

yf 没有这个功能。您需要从可以按行业查询股票的网站提出请求 如何从可以按行业查询股票的网站发出请求? 正确,一旦您的网站拥有股票,您就可以使用requestspd.read_html 【参考方案1】:

可以使用名为yahooquery 的包轻松检索这些数据。免责声明:我是包的作者。

要获得科技板块的股票,您可以执行以下操作:

from yahooquery import Screener

s = Screener()

# data is a dictionary containing the keys passed to the function
data = s.get_screeners('ms_technology', count=25)

# the majority of the data will be in the quotes key
data['ms_technology']['quotes'][0]
'language': 'en-US', 'region': 'US', 'quoteType': 'EQUITY', 'quoteSourceName': 'Delayed Quote', 'triggerable': True, 'currency': 'USD', 'priceHint': 2, 'longName': 'Apple Inc.', 'financialCurrency': 'USD', 'regularMarketOpen': 123.75, 'averageDailyVolume3Month': 106246233, 'averageDailyVolume10Day': 137149760, 'fiftyTwoWeekLowChange': 74.6375, 'fiftyTwoWeekLowChangePercent': 1.4042143, 'fiftyTwoWeekRange': '53.1525 - 145.09', 'fiftyTwoWeekHighChange': -17.299995, 'fiftyTwoWeekHighChangePercent': -0.119236305, 'fiftyTwoWeekLow': 53.1525, 'fiftyTwoWeekHigh': 145.09, 'dividendDate': 1613001600, 'earningsTimestamp': 1611765000, 'earningsTimestampStart': 1619607540, 'earningsTimestampEnd': 1620043200, 'trailingAnnualDividendRate': 0.807, 'trailingPE': 34.659615, 'trailingAnnualDividendYield': 0.0066551208, 'marketState': 'POSTPOST', 'epsTrailingTwelveMonths': 3.687, 'epsForward': 4.68, 'epsCurrentYear': 4.45, 'priceEpsCurrentYear': 28.716856, 'sharesOutstanding': 16788100096, 'bookValue': 3.936, 'fiftyDayAverage': 132.6306, 'fiftyDayAverageChange': -4.840599, 'fiftyDayAverageChangePercent': -0.036496848, 'twoHundredDayAverage': 122.9772, 'twoHundredDayAverageChange': 4.8127975, 'twoHundredDayAverageChangePercent': 0.039135687, 'marketCap': 2145351368704, 'forwardPE': 27.305557, 'priceToBook': 32.466972, 'sourceInterval': 15, 'exchangeDataDelayedBy': 0, 'exchangeTimezoneName': 'America/New_York', 'exchangeTimezoneShortName': 'EST', 'gmtOffSetMilliseconds': -18000000, 'esgPopulated': False, 'tradeable': True, 'firstTradeDateMilliseconds': 345479400000, 'postMarketChangePercent': 0.7434107, 'postMarketTime': 1614646799, 'postMarketPrice': 128.74, 'postMarketChange': 0.9500046, 'regularMarketChange': 6.529999, 'regularMarketTime': 1614632402, 'regularMarketPrice': 127.79, 'regularMarketDayHigh': 127.93, 'regularMarketDayRange': '122.79 - 127.93', 'regularMarketDayLow': 122.79, 'regularMarketVolume': 116307692, 'regularMarketPreviousClose': 121.26, 'bid': 128.74, 'ask': 128.75, 'bidSize': 10, 'askSize': 11, 'exchange': 'NMS', 'market': 'us_market', 'messageBoardId': 'finmb_24937', 'fullExchangeName': 'NasdaqGS', 'shortName': 'Apple Inc.', 'regularMarketChangePercent': 5.385122, 'displayName': 'Apple', 'symbol': 'AAPL'

将数据放入pandas DataFrame:

df = pd.DataFrame(data['ms_technology']['quotes'])

一次检索多个筛选器:

data = s.get_screeners(['ms_technology', 'ms_utilities', 'ms_real_estate'])

最后,查看可用的预定义筛选器列表:

# Will return a list
s.available_screeners

【讨论】:

我认为get_screener() 函数不适用于available_screeners() 中提供的所有数据。例如“技术”。 我有一个改进您的软件包的建议:您能否将asset_profile 下的sectoravailable_screeners 中的选项相匹配?【参考方案2】:

您正在寻找“行业”以获得更详细的描述:

msft= yf.Ticker("MSFT")
print(msft.info['industry'])

print(msft.info) 查看 json 文件以查看可用的内容。 yFinance 不会为所有股票代码提供相同数量的信息。

【讨论】:

以上是关于如何通过输入行业名称来获取股票代码列表的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的股票代码或公司名称获取股票市场公司部门

如何通过输入城市/城镇名称从谷歌地图获取餐厅列表?

如何使用 Binance API,通过股票代码简单 GET 价格

如何找到A股的所有股票的代码?比如网址或URL等

怎么从股票软件中把所有A股的代码和名称下载下来

股票交易数据接口获取股票基础信息数据的过程