解析共同基金JSON数据

时间:2016-08-18 00:04:36

标签: python json finance stocks

我正在尝试从交互式图表中提取数据,并且我从此链接获得了JSON文件

http://www.tadawul.com.sa/Charts/MutualFundChartDataDownloader

我尝试将其导入Python,以便我可以提取数据,但我面临错误

我写的代码:

import urllib
import json

htmltext = urllib.urlopen("https://www.tadawul.com.sa/Charts/MutualFundChartDataDownloader?actionTarget=mutualFundChartData&mutualFundSymbol=006038&format=json")

data = json.load(htmltext)

print data["unitPrice"]

我真正想要导入的是以下数据

"valuationDate"
"valudationDateAsDate"
"mutualFundNav"
"unitPrice"

我希望逐个获取这些数据,以便我可以将其复制并在Excel中使用。

我想要做的就是获得此图表的价格

3 个答案:

答案 0 :(得分:0)

运行您的(略微修改过的)代码会显示您实际获得的网站数据。

import urllib

htmltext = urllib.urlopen("https://www.tadawul.com.sa/Charts/MutualFundChartDataDownloader?actionTarget=mutualFundChartData&mutualFundSymbol=006038&format=json")
print htmltext.read()

这不是您所期望的,它会返回一个HTML文档:

<html><head><title>Request Rejected</title></head><body ... </html>

从Python调用而不是浏览器时,您的该URL请求被阻止。此代码发出包含用户代理的请求,该代理允许下载工作:

import urllib2
import json

url = "https://www.tadawul.com.sa/Charts/MutualFundChartDataDownloader?actionTarget=mutualFundChartData&mutualFundSymbol=006038&format=json"
request = urllib2.Request(url, headers={'User-Agent' : ''})
result = urllib2.urlopen(request)
data = json.loads(result.read())

for entry in data:
    print entry[u'valuationDate']

答案 1 :(得分:0)

使用以下代码段:

import urllib.request as ur
import json

link= "https://www.tadawul.com.sa/Charts/MutualFundChartDataDownloader?actionTarget=mutualFundChartData&mutualFundSymbol=006038&format=json"

file = ur.urlopen(link)

# convert to json
file = json.load(file)

# parse as dataframe 
import pandas as pd
df= pd.DataFrame()
# get columns names
cols =list(file[0].keys())
# build your data frame
for c in cols: 
    df[c]= [f[c] for f in file]
# done 

数据的最终输出将如下所示:

enter image description here

然后将数据保存为Excel工作表。

df.to_excel("output.xlsx")

希望这会有所帮助。

答案 2 :(得分:0)

正如@ kylie.a在对问题本身的评论中所建议的那样,对请求进行处理要容易得多:

import requests
import json
import pandas as pd

link = [your url above]
res = requests.get(link)
df = pd.read_json(res.text)