无法使用Python请求获取整个页面
我试图从一个网页获得一个长的JSON响应(~75MB),但是我只能收到前25MB左右的响应 我用过,但都没用过。我试过了,但也没用 以下是数据示例: 我的代码如下:无法使用Python请求获取整个页面,python,http,python-requests,urllib2,Python,Http,Python Requests,Urllib2,我试图从一个网页获得一个长的JSON响应(~75MB),但是我只能收到前25MB左右的响应 我用过,但都没用过。我试过了,但也没用 以下是数据示例: 我的代码如下: r = requests.get("http://waterservices.usgs.gov/nwis/iv/?site=14377100&format=json¶meterCd=00060&period=P260W") usgs_data = r.json() # script breaks
r = requests.get("http://waterservices.usgs.gov/nwis/iv/?site=14377100&format=json¶meterCd=00060&period=P260W")
usgs_data = r.json() # script breaks here
# Save Longitude and Latitude of river
latitude = usgs_data["value"]["timeSeries"][0]["sourceInfo"]["geoLocation"]["geogLocation"]["latitude"]
longitude = usgs_data["value"]["timeSeries"][0]["sourceInfo"]["geoLocation"]["geogLocation"]["longitude"]
# dictionary of all past river flows in cubic feet per second
river_history = usgs_data['value']['timeSeries'][0]['values'][0]['value']
它与:
ValueError: Expecting object: line 1 column 13466329 (char 13466328)
当脚本尝试解码JSON时(即usgs\u data=r.JSON()
)
这是因为尚未收到完整数据,因此不是有效的JSON对象。问题似乎是服务器一次提供的数据不会超过13MB 我使用了许多HTTP客户端(包括
curl
和wget
)尝试了这个URL,它们都以13MB的速度爆炸。我也尝试过启用gzip压缩(您也应该这么做),但解压缩后结果仍然被截断为13MB
您请求的数据太多,因为period=P260W
指定了260周。如果您尝试设置period=P52W
,您会发现您能够检索到有效的JSON响应
要减少传输的数据量,请如下设置接受编码
标题:
url = 'http://waterservices.usgs.gov/nwis/iv/'
params = {'site': 11527000, 'format': 'json', 'parameterCd': '00060', 'period': 'P52W'}
r = requests.get(url, headers={'Accept-Encoding': 'gzip,deflate'})
有趣的是,它对我有效,
r.json()
不会抛出错误。@alecxe它似乎偶尔对我有效,而其他时候则会出错。我想这支持了他们的服务器有问题的说法实际上,请求
设置了默认的接受编码:gzip,deflate
头,所以你不必这样做。不幸的是,我需要260周的数据来完成这个项目,所以我有点困在那里。我能做些什么让服务器推送更多信息?“它似乎偶尔会起作用。@本:作为一种解决办法,我建议您使用startDT
和endDT
参数来发出多个请求,以缩短间隔,然后合并结果,但是,要测试这一点,即使间隔仅为1天,有时也会导致响应被截断,可能请求正由不同的服务器处理。尝试一下这个想法,如果你有问题,我想你可能需要向网络服务提供商提出。