首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取一只股票所持有的机构股份的数量

提取一只股票所持有的机构股份的数量
EN

Stack Overflow用户
提问于 2022-02-08 16:29:00
回答 2查看 344关注 0票数 0

我在试着提取一只股票所持有的机构持股的数量。

例如,这里来自Apple的以下链接

https://finance.yahoo.com/quote/AAPL/holders?p=AAPL)

提取一个数字

我想从以下网址得到号码5,102

代码语言:javascript
复制
 "institutionsCount": {
    "raw": 5102,
    "fmt": "5.1k",
    "longFmt": "5,102"
}

我觉得这是郁金香对吧?

代码

这是目前为止的代码:

代码语言:javascript
复制
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,但是我不知道如何做一个循环来提取每个滴答键的所有持有者。因此,我想更容易做一个网络抓取一个,然后循环每个股票。

EN

回答 2

Stack Overflow用户

发布于 2022-02-08 16:50:26

使用yfinance

尝试模块yfinance ( API外观,客户端库到雅虎!))。这里的一些研究显示了如何:

然后适应你的情况,四处游玩:

代码语言:javascript
复制
import yfinance as yf

stock = yf.Ticker('APPL')
print(stock.info)

将检索到的JSON数据stock.info打印为dict:

代码语言:javascript
复制
{'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 Sharesyfinance,找到了一篇解释它的文章:

Ticker.major_holdersTicker.institutional_holders可以用来获取公司持股的细节。 major_holders:显示内部人士和机构持有多少股票和流通股。 Ticker.institutional_holders提供了主要机构持股的详细信息。

使用yfinance检索持卡人信息

代码语言:javascript
复制
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}")

打印希望保存所需数字的内容:

代码语言:javascript
复制
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:

代码语言:javascript
复制
 "institutionsCount": {
    "raw": 5102,
    "fmt": "5.1k",
    "longFmt": "5,102"
}

然后可以使用Pythons标准模块json解析它。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2022-02-10 08:01:03

非常感谢大家的启发。正如hc_dev提到的,最好使用yfinance模块。因为yfinance给了你一个pandas.core.frame,所以我把它转换成一个列表,这样我就可以得到我想要的东西。因此,我认为以下几点将有效地解决这个问题。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71037357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档