【问题标题】:Parsing mutual fund JSON data解析共同基金 JSON 数据
【发布时间】:2016-08-18 00:04:36
【问题描述】:

我正在尝试从交互式图表中提取数据,并且我有来自此链接的 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 中使用。

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

【问题讨论】:

  • 你的代码有什么问题?
  • 我建议使用库 requests 从网络中获取内容。这是一个更好的包。

标签: python json finance stocks


【解决方案1】:

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

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']

【讨论】:

    【解决方案2】:

    使用这个代码sn-p:

    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 
    

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

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

    df.to_excel("output.xlsx")
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      正如@kylie.a 在对问题本身的评论中所建议的那样,使用请求更容易做到这一点:

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

      【讨论】:

        猜你喜欢
        • 2022-11-12
        • 2011-11-28
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 1970-01-01
        • 2017-08-25
        相关资源
        最近更新 更多