如何通过输入行业名称来获取股票代码列表
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
没有这个功能。您需要从可以按行业查询股票的网站提出请求
如何从可以按行业查询股票的网站发出请求?
正确,一旦您的网站拥有股票,您就可以使用requests
或pd.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
下的sector
与available_screeners
中的选项相匹配?【参考方案2】:
您正在寻找“行业”以获得更详细的描述:
msft= yf.Ticker("MSFT")
print(msft.info['industry'])
print(msft.info)
查看 json 文件以查看可用的内容。 yFinance 不会为所有股票代码提供相同数量的信息。
【讨论】:
以上是关于如何通过输入行业名称来获取股票代码列表的主要内容,如果未能解决你的问题,请参考以下文章
如何从python中的股票代码或公司名称获取股票市场公司部门