如何通过StackOverflow API获取指定日期范围内的全部问题?
获取Stack Overflow指定日期范围内所有问题的方法
Stack Exchange API默认每页返回20条数据,要获取指定日期范围内的所有问题,需要利用API的分页机制遍历所有结果,具体操作如下:
- 调整请求参数,将
pagesize设为最大值100(API允许的单页最大返回数),减少请求次数 - 循环发送请求,每次递增
page参数,直到返回结果中的has_more字段为false(表示无更多数据) - 每次请求后,将返回的
items列表合并到总结果中
修改后的代码示例:
import requests base_url = 'https://api.stackexchange.com/2.3' endpoint = '/questions' params = { 'site': 'stackoverflow', 'tagged': tag, 'fromdate': start_date, 'todate': end_date, 'filter': 'default', 'pagesize': 100, # 设置单页最大返回数 'page': 1 # 初始页码 } all_questions = [] while True: response = requests.get(base_url + endpoint, params=params) response.raise_for_status() # 捕获请求错误 data = response.json() # 合并当前页问题到总列表 all_questions.extend(data.get('items', [])) # 判断是否还有更多数据 if not data.get('has_more', False): break # 更新页码,继续请求下一页 params['page'] += 1 # all_questions即为指定日期范围内的所有问题 print(f"共获取到{len(all_questions)}条问题")
注意事项:
- Stack Exchange API有请求频率限制,避免短时间内发送过多请求,必要时可添加短暂延迟
- 若返回结果中出现
backoff字段,需按提示等待对应秒数后再继续请求 - 确保
tag、start_date、todate变量已正确赋值(日期需转换为Unix时间戳)
内容的提问来源于stack exchange,提问作者Dimitris
相关产品推荐
相关产品推荐

