Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Python请求获取整个页面_Python_Http_Python Requests_Urllib2 - Fatal编程技术网

无法使用Python请求获取整个页面

无法使用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&parameterCd=00060&period=P260W") usgs_data = r.json() # script breaks

我试图从一个网页获得一个长的JSON响应(~75MB),但是我只能收到前25MB左右的响应

我用过,但都没用过。我试过了,但也没用

以下是数据示例:

我的代码如下:

r = requests.get("http://waterservices.usgs.gov/nwis/iv/?site=14377100&format=json&parameterCd=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天,有时也会导致响应被截断,可能请求正由不同的服务器处理。尝试一下这个想法,如果你有问题,我想你可能需要向网络服务提供商提出。