Python获取网站数据集时如何限制请求量为最新100条并解决10000条记录限制报错问题?
Python获取网站数据集时如何限制请求量为最新100条并解决10000条记录限制报错问题?
看起来你碰到了两个实际问题:一是请求数据量超过10000条时触发了服务器的500错误,二是不知道怎么通过Period列筛选出最新的100条数据。我来给你梳理下可行的解决方案~
核心思路:从请求源头限制数据量
服务器返回HTTP Error 500的原因很明确——它不允许单次请求返回超过10000条记录。所以最直接的办法是在请求URL里添加参数,让服务器只返回你需要的最新100条数据,而不是先请求全量数据再筛选(毕竟全量请求会直接报错)。
不同网站的API参数格式可能不一样,但常见的规则有这些:
- 限制返回条数:用
$top=100(OData类API常用)、limit=100或者page_size=100 - 按时间/周期排序取最新:用
$orderby=Period desc(OData)、sort=Period&direction=desc或者order=Period%20desc(%20是空格的URL编码)
举个例子,如果你的目标API是OData规范的,修改后的URL应该是这样的:
# 原URL基础上添加排序和限制参数 url1 = "********?$orderby=Period desc&$top=100"
适配你的代码
把参数加到URL后,你的代码可以直接使用,拿到的就是最新的100条数据:
import pandas as pd, json, ssl, certifi from urllib.request import urlopen def get_jsonparsed_data(url): response = urlopen(url, context=ssl.create_default_context(cafile=certifi.where())) data = response.read().decode("utf-8") return json.loads(data) # 修改后的URL,确保只返回最新100条 url1 = "********?$orderby=Period desc&$top=100" df = pd.DataFrame(get_jsonparsed_data(url1)['value'])
备用方案:如果API不支持请求参数筛选
要是这个网站的API不支持通过URL参数排序和限制条数,那你只能退而求其次——通过分页请求获取数据,比如每次请求1000条,拿到最后几页的数据后再筛选最新的100条。不过这种方式比较麻烦,而且需要知道API的分页规则(比如$skip参数),优先推荐前面的请求参数方案。
另外,如果成功拿到数据后,你可以再手动确认并筛选最新的100条:
# 按Period列降序排序,取前100条 df = df.sort_values('Period', ascending=False).head(100)
小提示
如果不确定API支持哪些参数,可以看看网站的API文档,或者在浏览器里打开原URL,观察返回的JSON结构里有没有分页、排序相关的提示,也可以尝试在URL里加常见的参数测试(比如先加?$top=10看看返回数据是否减少)。
备注:内容来源于stack exchange,提问作者Keerti Baskar
相关产品推荐
相关产品推荐

