我是JSON的新手。我运行下面的代码并收到错误
import urllib2
import json
urllib2.urlopen('https://ciapipreprod.cityindextest9.co.uk/TradingApi')
print json.load(urllib2.open(`https://ciapipreprod.cityindextest9.co.uk/TradingApi'))
ValueError: No JSON object could be decoded
但是当我在没有json的情况下运行它时,我可以看到里面的东西。
import urllib2
data=urllib2.urlopen('https://ciapipreprod.cityindextest9.co.uk/TradingApi')
html = data.read()
print html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Ajax Test Harness</title>
<link href="/TradingAPI/Content/css?v=oI5uNwN5NWmYrn8EXEybCIbINNBbTM_DnIdXDUL5RwE1" rel="stylesheet" type="text/css" />
<link href="/TradingAPI/Content/themes/base/css?v=M29VGAPKJl__Ya5hV5ngguUfY8uNXwB076bG-JmFavY1" rel="stylesheet" type="text/css" />
<script src="/TradingAPI/Scripts/js?v=lYEohN8Pq3__VMPgz6C4ZXSyFUc0d6gVJQ28Wflqo3E1"></script>
</head>
<body>
<div style="width: 100%; margin: 0px;">
<img alt="CityIndex Logo" src="/TradingAPI/Images/ci_white_logo.jpg"/>
</div>
<h2>Ajax Test Harness</h2>
<script src="/TradingAPI/Scripts/tradingApi.js" language="javascript" type="text/javascript"></script>
<script src="/TradingAPI/Scripts/corsTest.js" language="javascript" type="text/javascript"></script>
<script src="/TradingAPI/Scripts/json2.js" language="javascript" type="text/javascript"></script>
<div id="apitest">
<form id="form1" runat="server"></form>
<hr />
<h2>Test Harness</h2>
<button onclick=" eval($('#code').val()); ">Execute</button><br />
<textarea id="code" cols="120" rows="15">
var userName = "DM631479";
doPost('/session',{ "UserName": userName, "Password": "password"}, function (data, textCode) {
// Smoke Test
doGet('/smoketest');
setRequestHeader("UserName", userName);
setRequestHeader("Session", data.Session);
// Authentication Test
doGet('/smoketest/authenticated');
// Account Information Tests
doGet('/useraccount/DM631479/ChartingEnabled');
doGet('/useraccount/ClientAndTradingAccount');
// Need Valid Test Data doPost('/useraccount/Save', {"PersonalEmailAddress":"not@realaddress.com","PersonalEmailAddressIsDirty":true})
// Cfd Markets Test
doGet('/cfd/markets?marketname=uk&maxresults=10&usemobileshortname=true');
//Logoff
doPost('/session/deleteSession?userName='+userName+'&session='+data.Session);
});
/* var userName = "DM631479";
cityindex.corsTesting.doPost('/session',{ "UserName": userName, "Password": "password"}, function (data, textCode) {
});*/
</textarea>
<br />
<select id="result" style="background-color: #e4e4e4; min-height: 300px;" multiple="multiple"></select>
<hr />
</div>
</body>
</html>
我的理解是,如果我的var'Data'中有'{}',那么它们就是“词典”,然后我可以使用JSON模块调用它们。
也许我误读了变量的内容,也许JSON没有任何东西可以“加载”
很抱歉,如果此处的任何标记错误或不合格。
答案 0 :(得分:0)
JSON有here,该响应不符合。你所拥有的是嵌入在HTML中的JavaScript(以及一些JavaScript是有效的JSON)。它与这个例子类似:
<pre><code>print("Hello World")</code></pre>
包含 Python代码,但总体上不是有效的Python代码。为了提取数据,您需要找到一个不同的端点来生成有效的JSON(否则您将需要使用{{3在您感兴趣的页面上提取JavaScript的类似JSON的部分)内置于标准库,像a particular specified shape的库或正则表达式)。然后,您可以将有效的JSON文本提供给json.loads
并使用它。
答案 1 :(得分:0)
在我看来,url会返回html,而不是json。另外,从print语句来看,结果看起来并不像页面中嵌入了任何json。
json.load只能使用看起来像json的输入,这看起来像字典。它不会将其从周围的HTML中拉出来。
如果在该页面的某个地方有json,比如说,在脚本标签中,你首先必须解析html来提取它。你可以使用美丽的汤或scrapy。