当我使用urllib.request.decode
从JSON格式获取python字典时,它花费的时间太长。但是,在查看数据时,我意识到我什至不想要所有这些。
urllib.request.urlopen
还是问题,json.loads
还是.read().decode()
也是如此。该问题的主要症状可能是大约5秒钟,当您试图接收的信息甚至不多(少于1页非格式化字典)时。另一个症状是,当我尝试接收越来越多的信息时,有一点很重要,就是我根本没有收到网页的任何回复!
占用最多时间的2行是:
response = urllib.request.urlopen(url) # url is a string with the url
data = json.loads(response.read().decode())
对于其中的部分内容,我使用的是Edamam Recipe API。
我们将不胜感激。
答案 0 :(得分:1)
有什么办法只能获取一些数据,例如从JSON字典的键之一而不是所有键中获取数据吗?
您可以尝试使用流式json解析器,但我认为您不会从中获得任何提速。
或者,是否有更快的方法来获取可以正常工作的数据?
如果您必须从url中检索json文档并解析json内容,我无法想象有什么比发送http请求,读取响应内容和解析要快的多。
还是仅仅是连接问题而无法解决?
考虑到您提到的数据,这个问题确实在网络部分中,这意味着在python进程和服务器进程之间存在任何问题。请注意,这包括您的整个系统(代理/防火墙,网卡,操作系统tcp / ip堆栈等,可能还包括窗口上的某些防病毒软件),网络本身,以及最终服务器(速度可能很慢或有点过载)有时或故意限制您的请求,以避免过载。
urllib.request.urlopen还是问题,还是json.loads或.read()。decode()问题。
如果不在您自己的计算机上计时,我们怎么知道呢?但是您可以轻松地将其检出,只需计时各个零件的执行时间并记录下来即可。
上面的另一个症状是,当我尝试接收越来越多的信息时,有一点我根本根本没有收到网页的回复!
cf-如果您要连续发送数百个请求,则服务器可能会限制您的请求以避免过载(大多数API端点将以这种方式运行)或只是被过载。您是否至少检查了http响应状态代码?您可能会收到503(服务器超载)或429(请求过多)响应。