首页 > 解决方案 > 需要一个“for循环”来从它们各自的api url获取股票投资组合的股息数据

问题描述

我正在尝试自动解析股票投资组合的股息数据,并将股票明智的股息值放入单个数据框表中。

投资组合中每只股票的数据存储在单独的 api url

投资组合 ID(用于股票 - ITC、Britannia、Sanofi)为 [500875, 500825, 500674]。

我首先想运行一个“for循环”来生成/连接每个特定的url(如下所示 - https://api.bseindia.com/BseIndiaAPI/api/CorporateAction/w?scripcode=500674),最后6个url的数字是他们各自的公司ID

然后我想使用该 url 将每个相应的股息表的第一行放入一个数据框中。我用来获取个人红利数据的代码,以及我需要的最终数据帧在附加的图像中表示

基本上我想运行一个'for循环'来为每个股票ID获取'Table2'的第一行并将其存储在一个数据框中作为最终结果。

在此处输入图像描述

在此处输入图像描述

PS - 我用来获取个人股息数据的代码在下面突出显示:

url = 'https://api.bseindia.com/BseIndiaAPI/api/CorporateAction/w?scripcode=500674'

jsondata = requests.get(url, headers= {'User-Agent': 'Mozilla/5.0'}).json()

df = pd.DataFrame(jsondata['Table2'])

标签: pythonjsonpandasapidictionary

解决方案


如果你需要for-loop 那么你应该使用它并显示带有for-loop 的代码和它给你的问题。


您可以对所有作品使用单循环for

您可以使用字符串格式来创建带有代码的 url 并从服务器读取数据。接下来,您可以获得第一行(即使没有创建DataFrame)并附加到所有行的列表。在循环之后,您可以将此列表转换为DataFrame

import requests
import pandas as pd


# --- before loop ---

headers = {'User-Agent': 'Mozilla/5.0'}

all_rows = []

# --- loop ---

for code in  [500875, 500825, 500674]:

    # use `f-string` of string `.format()` to create url        
    #url = f'https://api.bseindia.com/BseIndiaAPI/api/CorporateAction/w?scripcode={code}'
    url = 'https://api.bseindia.com/BseIndiaAPI/api/CorporateAction/w?scripcode={}'.format(code)

    r = requests.get(url, headers=headers)
    #print(r.text)  #  to check error message
    #print(r.status_code)

    data = r.json()

    first_row = data['Table2'][0]  # no need to use DataFrame
    #df = pd.DataFrame(data['Table2'])
    #first_row = df.iloc[0]
    #print(first_row)
    
    all_rows.append(first_row)
    
# --- after loop ---

df_result = pd.DataFrame(all_rows)

print(df_result)

结果:

   scrip_code                  sLongName  ...   Details         PAYMENT_DATE
0      500875                   ITC LTD.  ...   10.1500  2020-09-08T00:00:00
1      500825  BRITANNIA INDUSTRIES LTD.  ...   83.0000  2020-09-16T00:00:00
2      500674           Sanofi India Ltd  ...  106.0000  2020-08-06T00:00:00

[3 rows x 9 columns]

推荐阅读