谷歌提供PageSpeed Insights API,通过将真实数据与模拟数据混合,提供与网页相关的加载性能计时数据,帮助搜索引擎优化专家和开发人员。
Google PageSpeed Insights(PSI)和Lighthouse的区别在于,PSI涉及真实世界和实验室数据,而Lighthouse通过修改设备的连接和用户代理来执行页面加载模拟。
另一个不同点是,PSI不提供任何与web可访问性、SEO或渐进式web应用程序(PWA)相关的信息,而Lighthouse提供上述所有信息。
因此,当我们使用PageSpeed Insights API进行批量URL加载性能测试时,我们将没有任何可访问性数据。
然而,PSI提供了与页面速度性能相关的更多信息,如“DOM大小”、“最深DOM子元素”、“总任务计数”和“DOM内容加载”时间。
PageSpeed Insights API的另一个优势是,它为“观察指标”和“实际指标”提供了不同的名称。
在本指南中,您将了解:
- 如何创建生产级Python脚本。
- 如何在Python中使用API。
- 如何从API响应构造数据帧。
- 如何分析API响应。
- 如何解析URL和处理URL请求的响应。
- 如何以适当的结构存储API响应。
下面是使用Python的页面速度洞察API调用的示例输出。
锂
在Python中使用PageSpeed Insights API的库
下面是在Python中使用PSI API的必要库。
- 广告工具从网站的站点地图检索测试URL。
- Pandas将构建数据框架并将API的JSON输出平坦化。
- 请求是向特定API端点发出请求。
- JSON将获取API响应并将其放入特定相关的字典点。
- Datetime用于使用当前日期修改特定输出文件的名称。
- URLlib用于解析测试主题网站URL。
如何在Python中使用PSI API?
要在Python中使用PSI API,请执行以下步骤。
- 获取PageSpeed Insights API密钥。
- 导入必要的库。
- 解析测试主题网站的URL。
- 将当前日期作为文件名。
- 从站点地图将URL放入列表中。
- 从PSI API中选择所需的度量。
- 创建一个For循环,用于获取所有URL的API响应。
- 使用选定的PSI API度量构建数据帧。
- 以XLSX的形式输出结果。
1.获取PageSpeed Insights API密钥
使用PageSpeed Insights API文档获取API密钥。
单击下面的“获取密钥”按钮。
选择您在Google开发者控制台中创建的项目。
在该特定项目上启用PageSpeed Insights API。
您需要在API请求中使用特定的API密钥。
2.导入必要的库
使用下面的行导入基本库。
进口
广告工具作为adv
进口熊猫作为pd
进口请求
导入json
从日期时间导入日期时间
来自urllib。解析导入urlparse
3.解析测试主题网站的URL
要解析主题网站的URL,请使用下面的代码结构。
domain=urlparse(sitemap_url)
domain=domain.netloc.split(“.”)[1]
“域”变量是站点地图URL的解析版本。
“netloc”表示特定URL的域部分。当我们用“.”分割它时,它会取代表域名的“中间部分”。
这里,“0”表示“www”,“1”表示“域名”,“2”表示“域扩展”,如果我们将其拆分为“.”
4.以文件名的时间为
要获取特定函数调用时刻的日期,请使用“datetime.now”方法。
日期时间。现在提供特定时刻的特定时间。将“strftime”与“%Y”、“m”和“%d”值一起使用。“%Y”是一年。“%m”和“%d”是特定月份和日期的数值。
date=datetime.now().strftime(“%Y_%m_%d”)
5.从站点地图将URL放入列表
要将URL从站点地图文件转换为列表形式,请使用下面的代码块。
站点地图=adv.sitemap_to_df(站点地图_url)
sitemap_url=sitemap[“loc”].to_list()
如果您阅读了Python站点地图健康审计,您可以了解有关站点地图的更多信息。
6.从PSI API中选择您想要的指标
要选择PSIAPI响应JSON属性,您应该看到JSON文件本身。
它与JSON对象的读取、解析和扁平化高度相关。
它甚至与语义搜索引擎优化有关,因为
“有向图”和“JSON-LD”结构化数据的概念。
在本文中,我们将不重点研究特定PSIAPI响应的JSON层次结构。
您可以看到我选择从PSI API收集的指标。它比PSI API的基本默认输出更丰富,PSI API只提供核心Web重要指标,即下一个绘制的速度索引交互、第一个字节的时间和第一个有内容的绘制。
当然,它还通过“避免链接关键请求”给出“建议”,但不需要将句子放入数据帧中。
将来,这些建议,甚至每个单独的链事件,其KB和MS值都可以被纳入一个名为“psi_suggestions”的列中
首先,您可以检查我选择的指标,其中重要的一部分将首先为您提供。
PSI API指标,第一节如下。
fid=[]
lcp=[]
cls_=[]
url=[]
fcp=[]
performance_score=[]
total_tasks=[]
total_tasks_time=[]
long_tasks=[]
dom_size=[]
最大_dom_depth=[]
maximum_child_element=[]
observed_fcp=[]
observed_fid=[]
observed_lcp=[]
observed_cls=[]
observed_fp=[]
observed_fmp=[]
observed_dom_content_loaded=[]
观测速度指数=〔〕
observed_total_blocking_time=[]
observed_first_visual_change=[]
observed_last_visual_change=[]
observed_tti=[]
观测值_max_potential_fid=[]
本节包括所有观察和模拟的基本页面速度指标,以及一些非基本指标,如“加载的DOM内容”,或
“第一幅有意义的画。”
PSI度量的第二部分关注未使用代码量可能节省的字节和时间。
render_blocking_resources_ms_save=[]
unused_javascript_ms_save=[]
unused_javascript_byte_save=[]
unused_css_rules_ms_save=[]
unused_css_rules_bytes_save=[]
PSI指标的第三部分重点关注服务器响应时间、响应图像使用效益,以及使用危害。
可能_server_response_time_saving=[]
可能_responsive_image_ms_save=[]
注:整体绩效分数来自“绩效分数”
7.创建一个For循环,用于获取所有URL的API响应
for循环是从站点地图文件中获取所有URL,并对所有URL逐一使用PSI API。PSI API自动化的for循环有几个部分。
PSI API for循环的第一部分从防止重复URL开始。
在站点地图中,您可以看到出现多次的URL。本节防止了这种情况。
对于sitemap_url[:9]中的i:
#防止重复“\/”尾斜杠URL请求覆盖信息。
如果i.endswith(“\/”):
r=请求。获取(f)https:\/\/www.googleapis.com\/pagespeedonline\/v5\/runPagespeed?url={i} &strategy=mobile&locale=en&key={api_key})
否则:
r=请求。获取(f)https:\/\/www.googleapis.com\/pagespeedonline\/v5\/runPagespeed?url={i} \/&strategy=mobile&locale=en&key={api_key})
记住检查PageSpeed Insights api端点末尾的“api_key”。
检查状态代码。在站点地图中,可能有非200个状态代码URL;这些应该是cl
伊尼德。
如果r.status_code==200:
#打印(r.json())
data_=json.load(r.text)
url.append(i)
下一节将特定度量附加到我们在“_data”之前创建的特定字典
fcp.append(数据_[“加载体验”][“度量”][”第一个_CONTENTFUL_PAINT_MS“][”百分位“]))
fid.append(数据_[“加载体验”][“度量”][“FIRST_INPUT_DELAY_MS”]][“百分位”])
lcp.append(数据_[“加载体验”][“度量”]、[“最大_CONTENTFUL_PAINT_MS”]、[“百分位”])
cls_.追加(数据_[“加载体验”][“度量”][““累积_布局_SHIFT_SCORE”]][“百分位数”])
performance_score。附加(数据_[“lighthouseResult”][“类别”]、[“性能”]、[“分数”]*100)
下一节重点讨论“总任务”计数和DOM大小。
total_tasks.append(数据_[“lighthouseResult”][“审计”][“诊断”][“详细信息”][“项目”][0][“numTasks”])
total_tasks_time.append(数据_[“lighthouseResult”][“审计”]、[“诊断”]、[“详细信息”]、[项目”]、[0]、[totalTaskTime])
long_tasks。附加(数据_[“lighthouseResult”][“审计”][“诊断”][“详细信息”][“项目”][0][“numTasksOver50ms”])
dom_size.append(数据_[“lighthouseResult”][“审计”][“dom size”]][“详细信息”][“项目”][0][“值”])
下一节将使用“DOM深度”和“最深DOM元素”
maximum_dom_depth.append(数据_[“lighthouseResult”][“审计”]、[“dom大小”]、[details”]、[“items”][1]、[value])
maximum_child_element.append(数据_[“lighthouseResult”][“审计”]、[“dom大小”]、[“详细信息”]、[项目”]、[2][“值”])
下一节将在我们的PageSpeedInsightsAPI中查看具体的测试结果。
observed_dom_content_loaded。附加(数据_[“lighthouseResult”][“审计”][“度量”][“详细信息”][“项目”][0][“observedDomContentLoaded”])
observed_fid.append(数据_[“lighthouseResult”][“审计”][“度量”][”det
ails“][“项目”][0][“observedDomContentLoaded”])
observed_ lcp。附加(数据_[“lighthouseResult”][“审计”]、[“度量”]、[“详细信息”]、[项目”]、[0]、[largestContentfulPaint])
observed_fcp。附加(数据_[“lighthouseResult”][“审核”][““度量”]][“详细信息”]][“项目”][0][“firstContentfulPaint”]))
observed_ cls。附加(数据_[“lighthouseResult”][“审计”][““度量”]][“详细信息”]][“项目”][0][“totalCumulativeLayoutShift”])
observed_speed_index.append(数据_[“lighthouseResult”][“审核”]、[“度量”]、[“详细信息”]、[项目”]、[0]、[“observedSpeedIndex”])
observed_total_blocking_time.追加(数据_[“lighthouseResult”][“审核”][“度量”][““详细信息”][”项目][0][“totalBlockingTime”])
observed_fp.append(数据_[“lighthouseResult”][“审计”][“度量”]、[“细节”]、[“项目”]、[0]、[“observedFirstPaint”])
observed_fmp。附加(数据_[“lighthouseResult”][“审计”]、[“度量”]、[“详细信息”]、[项目”]、[0][“firstMeaningfulPaint”])
观察到的_first_visual_change。附加(数据_[“lighthouseResult”][“审计”]、[“度量”]、[详细信息”]、[“项目”]、[0]、[“observedFirstVisualChange”])
observed_last_visual_change。附加(数据_[“lighthouseResult”][“审计”]、[“度量”]、[详细信息”]、[“项目”]、[0]、[“observedLastVisualChange”])
observed_tti.append(数据_[“lighthouseResult”][“审计”][“度量”][“详细信息”]、[“项目”]、[0]、[interactive”])
observed_max_potential_fid.append(数据_[“lighthouseResult”][“审计”]、[“度量”]、[details”]、[“项目”][0]、[maxPotentialFID”])
下一节将使用未使用的代码量和浪费的字节(以毫秒为单位)以及渲染阻塞资源。
render_blocking_resources_ms_save。附加(数据_[“lighthouseResult”][“审核”]、[“渲染阻塞资源”]、[“详细信息”]、[overallSavingsMs])
unused_javascript_ms_save.append(数据_[“lighthouseResult”][“审计”]、[“未使用的javascript”]、[“详细信息”]、[overallSavingsMs])
未使用的_javascript_byte_sa
ve.append(数据_[“lighthouseResult”][“审计”]、[“未使用的javascript”]、[“详细信息”]、[overallSavingsBytes])
未使用的_css_rules_ms_save.append(数据_[“lighthouseResult”][“审核”]、[“未使用的css规则”]、[“详细信息”]、[overallSavingsMs])
unused_css_rules_bytes_save.append(数据_[“lighthouseResult”][“审计”]、[“未使用的css规则”]、[“详细信息”]、[overallSavingsBytes])
下一节将提供响应性图像优势和服务器响应时间。
可能_server_response_time_saving。附加(数据_[“lighthouseResult”][“审核”]、[“服务器响应时间”]、[“详细信息”]、[overallSavingsMs])
可能_responsive_image_ms_save。附加(数据_[“lighthouseResult”][“审核”]、[“使用响应图像”]、[“详细信息”]、[overallSavingsMs])
下一节是在出现错误时使函数继续工作。
否则:
持续
页面速度洞察API与Python一起用于批量测试的示例
要使用特定的代码块,请将它们放入Python函数中。
运行脚本,您将在下面的列中获得29个页面速度相关指标。
结论
PageSpeed Insights API提供了不同类型的页面加载性能指标。
它演示了谷歌工程师如何理解页面加载性能的概念,并可能将这些指标用作排名、用户体验和质量理解的角度。
使用Python进行批量页面速度测试可以为您提供整个网站的快照,以帮助分析可能的用户体验、爬网效率、转换率和排名改进。