未知总页数时Power Query中API分页实现方法咨询
Power Query无初始分页信息时的API分页处理方案
前提说明
你已确认追加&total_count=true到API URL后可获取总记录数(1286条),基于此可按以下步骤实现分页抓取:
1. 先获取总记录数
构造带&total_count=true的请求URL,在Power Query中发起请求并提取总记录数:
let TotalCountUrl = "你的API基础URL&total_count=true", TotalCountResp = Web.Contents(TotalCountUrl), TotalCountJson = Json.Document(TotalCountResp), TotalRecords = TotalCountJson[total_count] // 替换为实际返回的总条数字段名 in TotalRecords
2. 计算总页数
先确定每页请求的记录数(比如设为100,可根据API限制调整),再通过向上取整计算总页数:
let TotalRecords = 1286, // 步骤1得到的总记录数 PageSize = 100, // 自定义每页条数 TotalPages = Number.RoundUp(TotalRecords / PageSize) in TotalPages
3. 生成所有分页请求URL
根据API的分页规则(常用page页码参数或offset偏移量参数),生成所有分页的请求URL列表:
let TotalRecords = 1286, PageSize = 100, TotalPages = Number.RoundUp(TotalRecords / PageSize), PageNumbers = List.Numbers(1, TotalPages), // 假设API用limit(每页条数)和offset(偏移量)参数,若用page参数则替换为&page=" & Text.From(_) PageUrls = List.Transform(PageNumbers, each "你的API基础URL&limit=" & Text.From(PageSize) & "&offset=" & Text.From((_ - 1)*PageSize)) in PageUrls
4. 批量请求并合并数据
遍历所有分页URL,逐个解析JSON数据并合并成完整表格:
let PageUrls = ..., // 步骤3生成的URL列表 PageDataList = List.Transform(PageUrls, (url) => let Resp = Web.Contents(url), JsonData = Json.Document(Resp), DataTable = Table.FromRecords(JsonData[data]) // 替换为实际返回的数据字段名 in DataTable ), CombinedData = Table.Combine(PageDataList) in CombinedData
5. 可选:添加异常处理
为避免单个分页请求失败导致整个流程中断,可加入try...otherwise做错误处理:
PageDataList = List.Transform(PageUrls, (url) => try let Resp = Web.Contents(url), JsonData = Json.Document(Resp), DataTable = Table.FromRecords(JsonData[data]) in DataTable otherwise Table.FromRecords({}) // 请求失败时返回空表 ), CombinedData = Table.Combine(PageDataList)
内容的提问来源于stack exchange,提问作者Aimee L
相关产品推荐
相关产品推荐

