我正在尝试从交互式图表中提取数据,并且我从此链接获得了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中使用。
我想要做的就是获得此图表的价格
答案 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
数据的最终输出将如下所示:
然后将数据保存为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)