【问题标题】:Half of json disappearing一半的json消失
【发布时间】:2016-01-16 15:02:15
【问题描述】:

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

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,但这会在所有键和值的开头添加反斜杠和逗号。我研究了这个错误,我知道如果数据已经被 json 化,就会发生这种情况。我只想将相关数据转换为 python 对象,以便我可以进行一些逻辑解析,例如调用 products.name/price,因为我想从客户端带来查询参数,所以我无法以当前的文本格式进行解析.这是一个真正的困境,因为我可以看到数据但没有做任何有用的事情。我也不相信字符串操作适合这个过程。如果有人能帮助我,我将不胜感激。

【问题讨论】:

  • 请学习一下 Markdown (stackoverflow.com/editing-help),不要在代码中穿插 HTML 块,没有必要。
  • 你能分享一下woolies_data.txt吗?也许 JSON 格式有问题...
  • 我一定会这样做的。谢谢

标签: python json web web-scraping


【解决方案1】:

假设您正在尝试将 API 响应放入 Python dict,您需要做的就是以下操作:

import requests

url = "https://www.woolworths.com.au/apis/ui/Search/products?IsMultisearch=true&IsSpecial=false&PageNumber=1&PageSize=5&SearchTerm=chicken&SortType=Relevance"
r = requests.get(url)
data = r.json()

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

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

woolies_data=(requests.get(api_woolies))

requests.get(api_woolies) 周围的括号不是必需的。分配api_wollies 变量时也是如此。如果您不小心在括号内添加了逗号,,您将创建一个元组,这可能会导致不良行为。最后,我建议在你的作业周围使用空格:

var = "value"
# instead of
var="value"

它提高了可读性,并根据 Python 样式指南 (PEP-8) 推荐。

【讨论】:

  • @bobince 你说得对,我忘了。我会稍微改变一下措辞。
猜你喜欢
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多