优化PageSpeed Insights脚本:实现每10个URL批量导出至Google Sheets
批量导出PageSpeed数据到Google Sheets的优化方案
核心逻辑修正
- 用列表缓存处理好的性能数据,每攒够10条就一次性写入Sheets
- 所有URL处理完毕后,把缓存中剩余的不足10条数据也写入,避免遗漏
修正后的代码示例
先初始化缓存和批量阈值:
# 初始化批量缓存,存储待写入的数据行 batch_data = [] # 自定义批量大小,这里设为10 BATCH_SIZE = 10
然后是URL循环处理的核心部分:
# 假设url_list是你的4000+URL列表 for url in url_list: # 调用PageSpeed API获取数据(替换成你实际的API调用代码) ps_result = fetch_pagespeed_metrics(url) # 把数据整理成Sheets需要的行格式(根据你的字段调整) row = [ url, ps_result.get('largest_contentful_paint'), ps_result.get('first_input_delay'), ps_result.get('cumulative_layout_shift') ] # 加入批量缓存 batch_data.append(row) # 达到批量阈值时执行写入 if len(batch_data) >= BATCH_SIZE: # 批量写入Sheets batch_write_to_sheets(batch_data) # 清空缓存,准备下一批 batch_data = [] # 处理最后一批不足10条的数据 if batch_data: batch_write_to_sheets(batch_data)
接着是批量写入Sheets的函数,要用上批量接口而非单条追加:
def batch_write_to_sheets(data_rows): # 这里假设你已经完成了Google Sheets的认证,拿到了sheet对象 # 比如用gspread库的话: sheet = your_authorized_client.open("性能报告").worksheet("数据页") # 获取当前表格的最后一行,避免覆盖已有数据 last_row = len(sheet.get_all_values()) + 1 # 计算写入的单元格范围 write_range = f"A{last_row}:D{last_row + len(data_rows) - 1}" # 执行批量更新,这比单条append快得多 sheet.update(write_range, data_rows, value_input_option='USER_ENTERED')
额外提速建议
- 给API调用加重试:用
tenacity库做自动重试,避免网络波动导致的失败中断 - 并行处理URL:用
concurrent.futures开多线程同时请求API(注意Google API的配额限制,别超过每秒请求数) - 记录处理进度:每写完一批就打印日志,比如“已完成XX条数据写入”,就算脚本崩溃也能从断点继续
内容的提问来源于stack exchange,提问作者Laura Scott
相关产品推荐
相关产品推荐

