如何使用Google Analytics Python API分页获取超1万条记录
如何为Google Analytics Reporting API V4实现分页获取全量数据
嘿,我刚好处理过类似的需求——Google Analytics Reporting API V4确实有单页最多返回10000条记录的限制,要拿到超过这个量的全量数据,就得靠API提供的分页token机制来循环请求。核心逻辑很简单:每次请求后检查响应里的nextPageToken,如果存在就带着这个token发起下一次请求,直到没有更多数据为止。
下面是修改后的完整函数,我会把关键改动点给你讲清楚:
def get_full_report(analytics): """Queries the Analytics Reporting API V4 and retrieves all records via pagination. Args: analytics: An authorized Analytics Reporting API V4 service object. Returns: A list containing all rows from the Analytics report. """ all_rows = [] page_token = None while True: # 构建请求体,首次请求pageToken为None,后续传递上一页的nextPageToken response = analytics.reports().batchGet( body={ 'reportRequests': [ { 'viewId': VIEW_ID, 'dateRanges': [{'startDate': '2020-07-02', 'endDate': '2020-07-09'}], 'pageSize': 10000, 'metrics':[{'expression': 'ga:pageViews'}], 'dimensions':[{'name': 'ga:dimension1'}, {'name': 'ga:dimension2'}], 'pageToken': page_token # 关键:分页标识,每次请求传递最新的token }] } ).execute() # 提取当前页的数据,合并到总列表中 report = response.get('reports', [])[0] if 'rows' in report: all_rows.extend(report['rows']) # 检查是否还有下一页数据 page_token = report.get('nextPageToken') if not page_token: break # 没有更多数据,结束循环 return all_rows
关键改动说明:
- 总数据存储:用
all_rows列表来累积所有分页返回的记录,避免每次请求覆盖之前的结果。 - 循环请求:用
while True持续发起请求,直到没有下一页token时退出。 - pageToken参数:这是分页的核心——首次请求时
page_token为None,API返回第一页;后续请求用前一次响应里的nextPageToken,告诉API要获取下一页的数据。 - 数据合并:每次拿到响应后,把当前页的
rows通过extend方法加到总列表里,这样最后就能得到完整的数据集。 - 终止条件:当响应里找不到
nextPageToken,说明所有数据都已经获取完毕,直接跳出循环。
小提示:
- 如果你需要保留表头信息(比如维度和指标的名称),可以在返回的时候把
report['columnHeader']也带上,方便后续解析数据。 - 注意API的配额限制,虽然分页是官方推荐的方式,但如果数据量特别大,还是要留意不要超出请求频率的限制哦。
内容的提问来源于stack exchange,提问作者merkle
相关产品推荐
相关产品推荐

