Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环和刮取金融股票_Python_Json_Loops_Web Scraping - Fatal编程技术网

Python 循环和刮取金融股票

Python 循环和刮取金融股票,python,json,loops,web-scraping,Python,Json,Loops,Web Scraping,我似乎无法完成这件事。我需要循环浏览CSV文件中的多个URL,但它不起作用。csv中的每一行都有一个URL,如中所示,用于更改最终的股票代码。这是我的密码 import requests import json import csv import pandas as pd stocks_arr =[] pfolio_file= open("URLTickers.csv", "r") for line in pfolio_file: indv_stock_arr = line.strip

我似乎无法完成这件事。我需要循环浏览CSV文件中的多个URL,但它不起作用。csv中的每一行都有一个URL,如中所示,用于更改最终的股票代码。这是我的密码

import requests
import json
import csv
import pandas as pd

stocks_arr =[]
pfolio_file= open("URLTickers.csv", "r")
for line in pfolio_file:
    indv_stock_arr = line.strip().split(',')
    stocks_arr.append(indv_stock_arr)
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
    jsonData = requests.get(line, headers=headers).json()

print(stocks_arr)

for stock in stocks_arr:
    data = {
        'Ticker': [],
        'Beta': [],
        'DY': [],
        'VOL': [],
        'P/L': [],
        'Cresc5A': [],
        'LPA': [],
        'VPA': [],
        'Ultimo': [],
      }

    ticker = jsonData['market_data']['ric']
    beta = jsonData['market_data']['beta']
    DY = jsonData['market_data']['current_dividend_yield_ttm']
    VOL = jsonData['market_data']['share_volume_3m']
    PL = jsonData['market_data']['pe_normalized_annual']
    cresc5a = jsonData['market_data']['eps_growth_5y']
    LPA = jsonData['market_data']['eps_normalized_annual']
    VPA = jsonData['market_data']['book_value_share_quarterly']
    Ultimo = jsonData['market_data']['last']

    data['Ticker'].append(ticker)
    data['Beta'].append(beta)
    data['DY'].append(DY)
    data['VOL'].append(VOL)
    data['P/L'].append(PL)
    data['Cresc5A'].append(cresc5a)
    data['LPA'].append(LPA)
    data['VPA'].append(VPA)
    data['Ultimo'].append(Ultimo)

table = pd.DataFrame(data, columns=['Ticker', 'Beta', 'DY', 'VOL', 'P/L', 'Cresc5A', 'LPA', 'VPA', 'Ultimo'])
table.index = table.index + 1
table.to_csv('CompleteData.csv', sep=',', encoding='utf-8', index=False)
print(table)
以下是回应:

ticker = jsonData['market_data']['ric']
Key Error: 'ric'
我做错了什么?

问题似乎是您从请求中得到的响应。GET请求成功,但JSON响应没有您请求的嵌套密钥

ticker = jsonData['market_data']['ric']
确保JSON结构是静态的。有时某些键在某些情况下不会出现。因此,除非密钥ric根本不存在,否则您可能需要在尝试解析响应之前添加一个条件。 比如

如果jsonData[“市场数据”中没有“ric”: 打印完整的数据。跳过
如果您使用异常处理,将获得额外积分。

您使用了错误的密钥。@ArkadiuszDrabczyk哪个密钥?你能告诉我应该改变什么吗?我不确定我是否按照你说的做了。每个URL中都有一个ric。@DiegoLins这就是我的意思,是的,至少有一个URL没有返回您期望的JSON结构。请共享您正在使用的CSV,或者,如果不可能,请使用我发布的if语句进一步调试代码,记住包含必须跳过的URL的输出。这是输出:如果jsonData['market_data']中的'ric'否:^SyntaxError:无效syntax@DiegoLins对不起,我的错。修正了“不”改为“不”。