一半的json消失了

时间:2016-01-16 15:02:16

标签: python json web web-scraping

我试图在python中搜索一个价格的网站,为此我查询了一个url api端点(??)。当我使用参数复制粘贴网址时,我会在浏览器中获得完整的JSON,并在Chrome开发者控制台中完成。我的代码看起来像这样..

import requests
import json
api_woolies=('https://www.woolworths.com.au/apis/ui/Search/products?IsMultisearch=true&IsSpecial=false&PageNumber=1&PageSize=5&SearchTerm=chicken&SortType=Relevance') #the url
woolies_data=(requests.get(api_woolies))
print woolies_data.text   # woolies_data.text actually contains full json what i want
woolies_data_=json.loads(woolies_data.text)  # removes the part I want and leaves with jsondata i dont need
print woolies_data_

响应内容类型是json。在woolies_data.json()等响应对象上调用json,使用json.loads(woolies_data.text)json.loads(woolies_data.content)会删除前面的所有数据,并从corrections:none开始,因为您可以在浏览器中看到它。我尝试使用json.dumps,但在所有键和值的开头添加了反斜杠和反转逗号。我研究了这个错误,我发现如果数据已经被jsonified,就会发生这种情况。我只是想将相关数据转换为python对象,以便我可以进行一些逻辑解析,比如调用products.name/price我无法以当前格式的文本执行,因为我想从客户端带来查询参数。这是一个真正的困境,因为我可以看到数据,但没有做任何有用的事情。我也不相信字符串操作适合该过程。如果有人可以帮助我,我真的很感激。

1 个答案:

答案 0 :(得分:2)

假设您正在尝试将API响应转换为Python dict,您需要执行以下操作:

requests.get(api_woolies)

SharedPreferences函数自动将响应的JSON内容解码为Python dict数据结构,因此您只需将其分配给变量,然后使用常规字典操作来访问您正在查找的信息。

你在使用括号时过于热心。例如,在

api_wollies

,周围的parens不是必需的。分配var = "value" # instead of var="value" 变量时也是如此。如果你不小心在parens中添加了一个逗号div { background: #aaa; width: 120px; },你就会创建一个元组,这可能会导致不受欢迎的行为。最后,我建议在作业周围使用空格:

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"/>
<div>
  <span><a href="#">Many words here in this text breakWithTheIcons</a>&#xfeff;<i class="fa fa-heart"></i><i class="fa fa-music"></i>
  </span>
</div>

它提高了可读性,建议根据Python样式指南(r.json())。