使用Python拉取Airtable记录遇问题,需用offset获取超100条数据
解决Airtable API拉取超过100条记录的分页问题
Airtable API默认单次请求最多返回100条记录,当结果总数超过100条时,响应数据里会包含offset字段,用于获取下一页的内容。你的现有代码仅发起了一次请求,因此只能拿到前100条记录。以下是修改后的完整实现,通过循环处理offset来获取所有符合条件的记录:
修改后的代码
import requests AIRTABLE_BASE_ID = 'airtablebaseid' AIRTABLE_API_KEY = 'airtableapikey' AIRTABLE_TABLE_NAME = 'airtablename' base_url = f'https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}' # 把筛选参数单独提取,方便后续拼接offset filter_params = { 'filterByFormula': 'AND(NOT({Sent to Payroll} = "Sent"),NOT({Sent to Payroll} = "Skipped"))' } def get_airtable_records(offset=None): headers = { "Authorization": f"Bearer {AIRTABLE_API_KEY}" } params = filter_params.copy() if offset: params['offset'] = offset response = requests.get(base_url, headers=headers, params=params) # 捕获请求错误,避免后续JSON解析失败 response.raise_for_status() return response.json() recordList = [] recordIDs = [] recordTimeStamp = [] offset = None while True: data = get_airtable_records(offset) # 处理当前页的所有记录 for record in data['records']: recordList.append(record['fields']) recordIDs.append(record['id']) recordTimeStamp.append(record['createdTime']) print(record) # 检查是否存在下一页的偏移量 offset = data.get('offset') if not offset: break
关键修改说明
- 重构请求函数,使其支持接收
offset参数,每次请求时动态拼接分页参数 - 使用
while True循环持续请求,直到响应中不再返回offset字段(即所有记录已拉取完成) - 将筛选条件存入字典,避免直接拼接URL的格式问题,同时提升代码可维护性
- 添加
response.raise_for_status(),用于捕获API请求错误(如密钥无效、权限不足等)
内容的提问来源于stack exchange,提问作者Jaydee
相关产品推荐
相关产品推荐

