我在试着提取一只股票所持有的机构持股的数量。
例如,这里来自Apple的以下链接
https://finance.yahoo.com/quote/AAPL/holders?p=AAPL)
提取一个数字
我想从以下网址得到号码5,102:
"institutionsCount": {
"raw": 5102,
"fmt": "5.1k",
"longFmt": "5,102"
}我觉得这是郁金香对吧?
代码
这是目前为止的代码:
import requests
from bs4 import BeautifulSoup
headers = {'user-agent': 'Mozilla/5.0'}
url = 'https://finance.yahoo.com/quote/AAPL/holders?p=AAPL'
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')我试过的
我试着使用yfinance,但是我不知道如何做一个循环来提取每个滴答键的所有持有者。因此,我想更容易做一个网络抓取一个,然后循环每个股票。
发布于 2022-02-08 16:50:26
使用yfinance
尝试模块yfinance ( API外观,客户端库到雅虎!))。这里的一些研究显示了如何:
然后适应你的情况,四处游玩:
import yfinance as yf
stock = yf.Ticker('APPL')
print(stock.info)将检索到的JSON数据stock.info打印为dict:
{'symbol': 'APPL', 'quoteType': 'MUTUALFUND', 'exchange': 'YHD', 'exchangeTimezoneName': 'America/New_York', 'exchangeTimezoneShortName': 'EST', 'gmtOffSetMilliseconds': '-18000000', 'market': 'us_market', 'isEsgPopulated': False, 'quoteSourceName': 'Delayed Quote', 'regularMarketOpen': None, 'averageDailyVolume3Month': None, 'regularMarketTime': 1561759658, 'volume24Hr': None, 'regularMarketDayHigh': None, 'shortName': None, 'averageDailyVolume10Day': None, 'longName': None, 'regularMarketChange': None, 'regularMarketPreviousClose': None, 'preMarketPrice': None, 'exchangeDataDelayedBy': 0, 'toCurrency': None, 'postMarketChange': None, 'postMarketPrice': None, 'exchangeName': 'YHD', 'preMarketChange': None, 'circulatingSupply': None, 'regularMarketDayLow': None, 'priceHint': 2, 'regularMarketPrice': None, 'regularMarketVolume': None, 'lastMarket': None, 'regularMarketSource': 'DELAYED', 'openInterest': None, 'marketState': 'POST', 'underlyingSymbol': None, 'marketCap': None, 'volumeAllCurrencies': None, 'strikePrice': None, 'maxAge': 1, 'fromCurrency': None, 'logo_url': ''}但是,在雅虎的截图中,没有任何类似于您的信息需求(给定号码的5,102)的institution或任何其他计数!AAPL的财务页面:

关于所需数字的研究
我在网上搜索了Number of Institutions Holding Shares和yfinance,找到了一篇解释它的文章:
Ticker.major_holders和Ticker.institutional_holders可以用来获取公司持股的细节。major_holders:显示内部人士和机构持有多少股票和流通股。Ticker.institutional_holders提供了主要机构持股的详细信息。
使用yfinance检索持卡人信息
import yfinance as yf
appl = yf.Ticker('APPL')
full_name = appl.info['longName']
major_holders = appl.major_holders
institutional_holders = appl.institutional_holders
print(f"Name:\n{full_name}")
print(f"Major holders:\n{major_holders}")
print(f"Institutional holders:\n{institutional_holders}")打印希望保存所需数字的内容:
Name:
None
Major holders:
0 1
0 Previous Close NaN
1 YTD Return NaN
2 Expense Ratio (net) NaN
3 Category NaN
4 Last Cap Gain NaN
5 Morningstar Rating NaN
6 Morningstar Risk Rating NaN
7 Sustainability Rating NaN
Institutional holders:
0 1
0 Net Assets NaN
1 Beta (5Y Monthly) NaN
2 Yield NaN
3 5y Average Return NaN
4 Holdings Turnover NaN
5 Last Dividend NaN
6 Average for Category NaN
7 Inception Date NaN现在让您来弄清楚,为什么APPL没有可用的数据。
还测试代码AMZN,并查看来自媒体文章的示例输出是否可以用可用的数字️再现。
解析JSON提取值
如果您有这个JSON:
"institutionsCount": {
"raw": 5102,
"fmt": "5.1k",
"longFmt": "5,102"
}然后可以使用Pythons标准模块json解析它。
import json
json_text = """
"institutionsCount": {
"raw": 5102,
"fmt": "5.1k",
"longFmt": "5,102"
}
"""
obj = json.loads('{'+json_text+'}') # surrounding braces needed to make it a valid JSON (object)
print(obj['institutionsCount']['longFmt'])
# 5,102发布于 2022-02-10 08:01:03
非常感谢大家的启发。正如hc_dev提到的,最好使用yfinance模块。因为yfinance给了你一个pandas.core.frame,所以我把它转换成一个列表,这样我就可以得到我想要的东西。因此,我认为以下几点将有效地解决这个问题。
码
import yfinance as yf
ticker = input('Enter ticker:')
stock = yf.Ticker(ticker)
holders = stock.major_holders
holders_list = holders[0].to_list()
number = holders_list[3]
print('Number of institutionals:', number)https://stackoverflow.com/questions/71037357
复制相似问题