【问题标题】:Scrape current stock price and create data frame抓取当前股票价格并创建数据框
【发布时间】:2021-03-04 04:03:53
【问题描述】:

我有一个名为 Symbols 的 Pandas 列表,其中包含 30 个股票代码,例如 Apple ->> AAPL,我想获取每个代码的当前股票价格并使用此信息填充数据框。两列:第一列带有股票代码,第二列带有当前价格。运行这部分脚本时,我继续收到以下错误消息:

“ValueError:如果使用所有标量值,则必须传递一个索引”

Stock = []
Price = []
df_temp = []

for symbol in Symbols:
    try:
        params = {
        'symbols': symbol,
        'range': '1d',
        'interval': '1d',
        'indicators': 'close',
        'includeTimestamps': 'false',
        'includePrePost': 'false',
        'corsDomain': 'finance.yahoo.com',
        '.tsrc': 'finance'}

        url = 'https://query1.finance.yahoo.com/v7/finance/spark'

        r = requests.get(url, params=params)
        data = r.json()
                
        df_stock = pd.DataFrame({'Ticker' : symbol,
                                'Current Price' : data['spark']['result'][0]['response'][0]['indicators']['quote'][0]['close'][0]
                                })
        
        df_temp.append(df_stock)
        df_temp = pd.concat(df_temp, axis = 1)
    except KeyError:
        continue

【问题讨论】:

    标签: python json pandas api web-scraping


    【解决方案1】:

    只需要改变一个部分-

    df_stock = pd.DataFrame({'Ticker' : [symbol],
                                    'Current Price' : [data['spark']['result'][0]['response'][0]['indicators']['quote'][0]['close'][0]]
                                    })
    

    输出

        Ticker  Current Price
    0   AAPL        118.119
    

    完整代码

    Stock = []
    Price = []
    df_temp = pd.DataFrame()
    
    for symbol in ['AAPL', 'IBM', 'NKE', 'FB']:
        try:
            params = {
            'symbols': symbol,
            'range': '1d',
            'interval': '1d',
            'indicators': 'close',
            'includeTimestamps': 'false',
            'includePrePost': 'false',
            'corsDomain': 'finance.yahoo.com',
            '.tsrc': 'finance'}
    
            url = 'https://query1.finance.yahoo.com/v7/finance/spark'
    
            r = requests.get(url, params=params)
            data = r.json()
                    
            df_stock = pd.DataFrame({'Ticker' : [symbol],
                                    'Current Price' : [data['spark']['result'][0]['response'][0]['indicators']['quote'][0]['close'][0]]
                                    })
            
            df_temp = df_temp.append(df_stock)
        except KeyError:
            continue
    

    说明

    您作为值传递给 df_stock 的是标量值,包裹在列表中即可解决。

    【讨论】:

    • 但是当你通过它传递多个股票代码时,它会给出一个数据框,其中第一列中的股票代码和第一个股票代码的股票价格:Ticker Current Price 0 [AAPL, IBM, NKE, FB ] 118.155
    • @JuneSmith 您的代码中还有几个逻辑错误,请立即修改
    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多