谷歌seo指南_使用PageSpeed Insights API和Python进行批量加载性能测试

Bulk Loading Performance Tests With PageSpeed Insights API & Python

谷歌提供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响应。

Bulk Loading Performance Tests With PageSpeed Insights API & Python

Bulk Loading Performance Tests With PageSpeed Insights API & Python

下面是使用Python的页面速度洞察API调用的示例输出。

example output of the Page Speed Insights作者截图,2022年6月example output of the Page Speed Insights


在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密钥。

单击下面的“获取密钥”按钮。

psi api key 这张图片来自developers.google。com,2022年6月psi api key

选择您在Google开发者控制台中创建的项目。

google developer console api project这张图片来自developers.google。com,2022年6月google developer console api project

在该特定项目上启用PageSpeed Insights API。

page speed insights api enable这张图片来自developers.google。com,2022年6月page speed insights api enable

您需要在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作者截图,2022年6月pagespeed insights api

结论

PageSpeed Insights API提供了不同类型的页面加载性能指标。

它演示了谷歌工程师如何理解页面加载性能的概念,并可能将这些指标用作排名、用户体验和质量理解的角度。

使用Python进行批量页面速度测试可以为您提供整个网站的快照,以帮助分析可能的用户体验、爬网效率、转换率和排名改进。

0 0 vote
评分
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top

请输入您的资料

你也可以直接右下角客服直接跟我们联系
=

请输入您的资料

seo
你也可以直接右下角客服直接跟我们联系
=

request a quote