自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python除了做爬蟲(chóng)抓數(shù)據(jù)還能做什么?其實(shí)還能監(jiān)視和衡量網(wǎng)站性能

開(kāi)發(fā) 后端
收到Google的公告后,我認(rèn)為現(xiàn)在是共享它的絕佳時(shí)機(jī),并解釋了如何創(chuàng)建對(duì)初學(xué)者友好的Python腳本。關(guān)于腳本的最好的事情是,一旦建立了基礎(chǔ),就可以提取許多不同的指標(biāo),這些指標(biāo)可以在頁(yè)面速度測(cè)試以及Lighthouse分析中找到。

借助這份對(duì)初學(xué)者友好的指南,您可以構(gòu)建自己的自定義Python腳本來(lái)自動(dòng)測(cè)量網(wǎng)站的關(guān)鍵速度和性能指標(biāo)。

 

Python除了做爬蟲(chóng)抓數(shù)據(jù)還能做什么?其實(shí)還能監(jiān)視和衡量網(wǎng)站性能

在過(guò)去的一個(gè)月中,Google宣布了許多通過(guò)關(guān)鍵速度和性能指標(biāo)來(lái)衡量用戶體驗(yàn)的方法。

巧合的是,我一直在努力編寫(xiě)一個(gè)Python腳本,該腳本使用Google PageSpeed Insights(PSI)API一次收集多個(gè)頁(yè)面的指標(biāo),而無(wú)需為每個(gè)單獨(dú)的URL運(yùn)行測(cè)試。

收到Google的公告后,我認(rèn)為現(xiàn)在是共享它的絕佳時(shí)機(jī),并解釋了如何創(chuàng)建對(duì)初學(xué)者友好的Python腳本。

關(guān)于腳本的最好的事情是,一旦建立了基礎(chǔ),就可以提取許多不同的指標(biāo),這些指標(biāo)可以在頁(yè)面速度測(cè)試以及Lighthouse分析中找到。

網(wǎng)絡(luò)重要指標(biāo)簡(jiǎn)介

5月初,Google推出了Core Web Vitals,它是其關(guān)鍵Web Vitals指標(biāo)的一部分。

這些指標(biāo)用于提供有關(guān)網(wǎng)站上用戶體驗(yàn)質(zhì)量的指導(dǎo)。

Google將其描述為“幫助量化您的網(wǎng)站體驗(yàn)并確定改進(jìn)機(jī)會(huì)”的一種方式,進(jìn)一步強(qiáng)調(diào)了它們向關(guān)注用戶體驗(yàn)的轉(zhuǎn)變。

核心網(wǎng)絡(luò)生命力是真實(shí)的,以用戶為中心的指標(biāo),用于衡量用戶體驗(yàn)的關(guān)鍵方面。加載時(shí)間,互動(dòng)性和穩(wěn)定性。

除此之外,Google 上周宣布,他們將引入一個(gè)新的搜索排名信號(hào),它將這些指標(biāo)與現(xiàn)有頁(yè)面體驗(yàn)信號(hào)(例如移動(dòng)設(shè)備友好性和HTTPS安全性)結(jié)合在一起,以確保它們繼續(xù)為高質(zhì)量網(wǎng)站提供服務(wù)給用戶。

監(jiān)控性能指標(biāo)

預(yù)計(jì)此更新將于2021年推出,Google已確認(rèn)不需要立即采取行動(dòng)。

但是,為了幫助我們?yōu)檫@些更改做準(zhǔn)備,他們更新了用于測(cè)量頁(yè)面速度的工具,包括PSI,Google Lighthouse和Google Search Console Speed Report。

Pagespeed Insights API從何入手?

Google的PageSpeed Insights是查看網(wǎng)頁(yè)效果摘要的有用工具,它使用現(xiàn)場(chǎng)數(shù)據(jù)和實(shí)驗(yàn)室數(shù)據(jù)來(lái)生成結(jié)果。

這是獲得少數(shù)URL概述的好方法,因?yàn)樗侵痦?yè)使用的。

但是,如果您在大型站點(diǎn)上工作,并且希望獲得大規(guī)模的見(jiàn)解,那么該API可以有利于一次分析多個(gè)頁(yè)面,而無(wú)需單獨(dú)插入U(xiǎn)RL。

用于衡量性能的Python腳本

我創(chuàng)建了以下Python腳本來(lái)大規(guī)模度量關(guān)鍵性能指標(biāo),以節(jié)省手動(dòng)測(cè)試每個(gè)URL所花費(fèi)的時(shí)間。

該腳本使用Python將請(qǐng)求發(fā)送到Google PSI API,以收集和提取在PSI和Lighthouse中顯示的指標(biāo)。

我決定在Google Colab中編寫(xiě)此腳本,因?yàn)檫@是開(kāi)始編寫(xiě)Python并允許輕松共享的好方法,因此本文將使用Google Colab貫穿整個(gè)安裝過(guò)程。

但是,它也可以在本地運(yùn)行,對(duì)數(shù)據(jù)的上傳和下載進(jìn)行一些調(diào)整。

請(qǐng)務(wù)必注意,某些步驟可能需要一些時(shí)間才能完成,尤其是當(dāng)每個(gè)URL通過(guò)API運(yùn)行時(shí),為了不使請(qǐng)求過(guò)載。

因此,您可以在后臺(tái)運(yùn)行腳本,并在完成步驟后返回到腳本。

讓我們逐步介紹啟動(dòng)和運(yùn)行此腳本所需的步驟。

步驟1:安裝所需的軟件包

在開(kāi)始編寫(xiě)任何代碼之前,我們需要安裝一些Python程序包,然后才能使用該腳本。這些使用導(dǎo)入功能很容易安裝。

我們需要的軟件包是:

  • urllib:用于處理,打開(kāi),閱讀和解析URL。
  • json:允許您將JSON文件轉(zhuǎn)換為Python或?qū)ython文件轉(zhuǎn)換為JSON。
  • request:一個(gè)HTTP庫(kù),用于發(fā)送各種HTTP請(qǐng)求。
  • pandas:主要用于數(shù)據(jù)分析和處理,我們正在使用它來(lái)創(chuàng)建DataFrames。
  • time:一個(gè)用于處理時(shí)間的模塊,我們正在使用它在請(qǐng)求之間提供時(shí)間間隔。
  • 文件:通過(guò)Google Colab,您可以上傳和下載文件。
  • io:用于訪問(wèn)文件的默認(rèn)接口。
  1. # Import required packages  
  2. import json 
  3. import requests 
  4. import pandas as pd 
  5. import urllib 
  6. import time 
  7. from google.colab import files 
  8. import io 

第2步:設(shè)置API請(qǐng)求

下一步是設(shè)置API請(qǐng)求。完整的說(shuō)明可以在這里找到,但是從本質(zhì)上講,該命令將如下所示:

  • https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={yourURL}/&strategy=mobile/&key={yourAPIKey}

這將允許您附加URL,策略(臺(tái)式機(jī)或移動(dòng)設(shè)備)和API密鑰。

要在Python中使用它,我們將使用urllib請(qǐng)求庫(kù)urllib.request.urlopen并將其添加到名為result的變量中,以便我們可以存儲(chǔ)結(jié)果并在腳本中再次使用它們。

  1. # Define URL   
  2. url = 'https://www.example.co.uk' 
  3.  
  4. # API request url 
  5. result = urllib.request.urlopen('https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={}/&strategy=mobile'
  6. .format(url)).read().decode('UTF-8'
  7.  
  8. print(result) 

步驟3:測(cè)試API

為了測(cè)試API的正確設(shè)置以及對(duì)測(cè)試過(guò)程中生成的內(nèi)容的理解,我使用簡(jiǎn)單的urllib.request方法通過(guò)API運(yùn)行了一個(gè)URL。

完成此操作后,我將結(jié)果轉(zhuǎn)換為json文件并下載了它,以便查看結(jié)果。

  1. Convert to json format 
  2. result_json = json.loads(result) 
  3.  
  4. print(result_json) 
  5.  
  6. with open('result.json''w'as outfile: 
  7.   json.dump(result_json, outfile) 
  8.  
  9. files.download('result.json'

(請(qǐng)注意,此方法用于在Google Colab中轉(zhuǎn)換和下載JSON文件。)

步驟4:讀取JSON檔案

JSON文件顯示字段數(shù)據(jù)(存儲(chǔ)在loadingExperience下)和實(shí)驗(yàn)室數(shù)據(jù)(可以在lighthouseResult下找到)。

為了提取所需的指標(biāo),我們可以利用JSON文件的格式,因?yàn)槲覀兡軌蚩吹矫總€(gè)部分下面的指標(biāo)。

第5步:上傳CSV并存儲(chǔ)為Pandas數(shù)據(jù)框

下一步是上傳我們要通過(guò)PSI API運(yùn)行的URL的CSV文件。您可以通過(guò)抓取工具(例如DeepCrawl)生成站點(diǎn)URL的列表。

當(dāng)我們使用API​​時(shí),建議您在此處使用較小的URL示例集,尤其是在您擁有大型站點(diǎn)的情況下。

例如,您可以使用訪問(wèn)量最高的頁(yè)面或產(chǎn)生最大收入的頁(yè)面。另外,如果您的站點(diǎn)有模板,則非常適合測(cè)試其中的模板。

您還可以在此處添加column-header變量,我們將在遍歷列表時(shí)使用該變量。確保此名稱與您上傳的CSV文件中的列標(biāo)題名稱匹配:

  1. uploaded = files.upload() 
  2. #if your column header is something other than 'url' please define it here  
  3. column_header='url' 

(請(qǐng)注意,此方法用于在Google Colab中上傳CSV文件。)

將其上傳后,我們將使用Pandas庫(kù)將CSV轉(zhuǎn)換為DataFrame,我們可以在以下步驟中進(jìn)行迭代。

  1. # Get the filename from the upload so we can read it into a CSV. 
  2. for key in uploaded.keys(): 
  3.   filename = key 
  4. Read the selected file into a Pandas Dataframe 
  5. df = pd.read_csv(io.BytesIO(uploaded[filename])) 
  6.  
  7. df.head() 

DataFrame看起來(lái)像這樣,從零索引開(kāi)始。

步驟6:將結(jié)果保存到響應(yīng)對(duì)象

下一步涉及使用for循環(huán)來(lái)迭代剛剛通過(guò)PSI API創(chuàng)建的URL的DataFrame。

for循環(huán)使我們可以遍歷上載的列表并為每個(gè)項(xiàng)目執(zhí)行命令。然后,我們可以將結(jié)果保存到響應(yīng)對(duì)象中,并將其轉(zhuǎn)換為JSON文件。

  1. response_object = {} 
  2.  
  3. # Iterate through the df 
  4. for x in range(0, len(df)): 
  5.  
  6.         # Define request parameter 
  7.         url = df.iloc[x][column_header] 
  8.  
  9.         # Make request 
  10.         pagespeed_results = urllib.request.urlopen('https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={}&strategy=mobile'.format(url)).read().decode('UTF-8'
  11.  
  12.         # Convert to json format 
  13.         pagespeed_results_json = json.loads(pagespeed_results) 
  14.  
  15.         # Insert returned json response into response_object 
  16.         response_object[url] = pagespeed_results_json 
  17.         time.sleep(30) 
  18.          
  19.         print(response_object[url]) 

我們將在此處使用范圍內(nèi)的x,它表示循環(huán)中正在運(yùn)行的URL,以及(0,len)允許循環(huán)遍歷DataFrame中的所有URL,無(wú)論包含多少個(gè)URL 。

該響應(yīng)對(duì)象防止通過(guò)重寫(xiě)相互循環(huán),你的網(wǎng)址,使我們能夠保存數(shù)據(jù)以備將來(lái)使用。

這也是在將其轉(zhuǎn)換為JSON文件之前,將使用列標(biāo)題變量定義URL請(qǐng)求參數(shù)的地方。

我還將此處的睡眠時(shí)間設(shè)置為30秒,以減少連續(xù)進(jìn)行的API調(diào)用次數(shù)。

另外,如果您希望更快地提出請(qǐng)求,則可以在URL命令的末尾附加一個(gè)API密鑰。

縮進(jìn)在這里也很重要,因?yàn)槊總€(gè)步驟都是for循環(huán)的一部分,因此必須在命令中縮進(jìn)它們。

步驟7:創(chuàng)建一個(gè)數(shù)據(jù)框來(lái)存儲(chǔ)響應(yīng)

我們還需要?jiǎng)?chuàng)建一個(gè)DataFrame來(lái)存儲(chǔ)我們要從響應(yīng)對(duì)象中提取的指標(biāo)。

DataFrame是類似于表的數(shù)據(jù)結(jié)構(gòu),具有存儲(chǔ)數(shù)據(jù)的列和行。我們只需要為每個(gè)指標(biāo)添加一列并適當(dāng)?shù)孛?,如下所示?/p>

  1. Create dataframe to store responses 
  2. df_pagespeed_results = pd.DataFrame(columns= 
  3.           ['url'
  4.           'Overall_Category'
  5.           'Largest_Contentful_Paint'
  6.           'First_Input_Delay'
  7.           'Cumulative_Layout_Shift'
  8.           'First_Contentful_Paint'
  9.           'Time_to_Interactive'
  10.           'Total_Blocking_Time'
  11.           'Speed_Index'])   
  12.  
  13. print(df_pagespeed_results) 

出于此腳本的目的,我使用了Core Web Vital指標(biāo)以及當(dāng)前Lighthouse版本中使用的其他負(fù)載和交互性指標(biāo)。

這些指標(biāo)各自具有不同的權(quán)重,然后將它們用于總體績(jī)效得分:

  • LCP
  • FID
  • CLS
  • FCP
  • TTI
  • TBT

您可以在上方鏈接的各個(gè)目標(biāo)網(wǎng)頁(yè)上找到有關(guān)每個(gè)指標(biāo)的更多信息以及如何解釋分?jǐn)?shù)的信息。

我還選擇包括速度指數(shù)和整體類別,這些類別將提供慢速,平均或快速得分。

步驟8:從響應(yīng)對(duì)象中提取指標(biāo)

保存響應(yīng)對(duì)象后,我們現(xiàn)在可以對(duì)其進(jìn)行過(guò)濾并僅提取所需的指標(biāo)。

在這里,我們將再次使用for循環(huán)遍歷響應(yīng)對(duì)象文件,并設(shè)置一系列列表索引以僅返回特定指標(biāo)。

為此,我們將從DataFrame中定義列名稱,以及為每個(gè)URL從中提取每個(gè)指標(biāo)的響應(yīng)對(duì)象的特定類別。

  1. for (url, x) in zip( 
  2.     response_object.keys(), 
  3.     range(0, len(response_object)) 
  4. ): 
  5.  
  6.         # URLs 
  7.         df_pagespeed_results.loc[x, 'url'] =\ 
  8.             response_object[url]['lighthouseResult']['finalUrl'
  9.  
  10.         # Overall Category 
  11.         df_pagespeed_results.loc[x, 'Overall_Category'] =\ 
  12.             response_object[url]['loadingExperience']['overall_category']    
  13.  
  14.         # Core Web Vitals      
  15.  
  16.         # Largest Contentful Paint     
  17.         df_pagespeed_results.loc[x, 'Largest_Contentful_Paint'] =\ 
  18.         response_object[url]['lighthouseResult']['audits']['largest-contentful-paint']['displayValue'
  19.  
  20.         # First Input Delay  
  21.         fid = response_object[url]['loadingExperience']['metrics']['FIRST_INPUT_DELAY_MS'
  22.         df_pagespeed_results.loc[x, 'First_Input_Delay'] = fid['percentile'
  23.  
  24.         # Cumulative Layout Shift     
  25.         df_pagespeed_results.loc[x, 'Cumulative_Layout_Shift'] =\ 
  26.         response_object[url]['lighthouseResult']['audits']['cumulative-layout-shift']['displayValue'
  27.  
  28.         # Additional Loading Metrics  
  29.  
  30.         # First Contentful Paint  
  31.         df_pagespeed_results.loc[x, 'First_Contentful_Paint'] =\ 
  32.         response_object[url]['lighthouseResult']['audits']['first-contentful-paint']['displayValue'
  33.  
  34.         # Additional Interactivity Metrics  
  35.  
  36.         # Time to Interactive   
  37.         df_pagespeed_results.loc[x, 'Time_to_Interactive'] =\ 
  38.         response_object[url]['lighthouseResult']['audits']['interactive']['displayValue'
  39.  
  40.         # Total Blocking Time    
  41.         df_pagespeed_results.loc[x, 'Total_Blocking_Time'] =\ 
  42.         response_object[url]['lighthouseResult']['audits']['total-blocking-time']['displayValue'
  43.  
  44.         # Speed Index 
  45.         df_pagespeed_results.loc[x, 'Speed_Index'] =\ 
  46.         response_object[url]['lighthouseResult']['audits']['speed-index']['displayValue'

我已將此腳本設(shè)置為提取上面提到的關(guān)鍵指標(biāo),因此您可以立即使用它來(lái)收集此數(shù)據(jù)。

但是,可以提取在PSI測(cè)試以及Lighthouse分析中都可以找到的許多其他有用指標(biāo)。

在此JSON文件可用于查看每個(gè)指標(biāo)在列表中的位置。

例如,在從Lighthouse審核中提取指標(biāo)(例如“互動(dòng)時(shí)間”的顯示值)時(shí),將使用以下內(nèi)容:

  1. df_pagespeed_results.loc[x, 'Time_to_Interactive'] =\ 
  2. response_object[url]['lighthouseResult']['audits']['interactive']['displayValue'

再一次,重要的是要確保每一個(gè)都位于循環(huán)中,否則它們將不會(huì)包含在迭代中,并且只會(huì)為一個(gè)URL生成一個(gè)結(jié)果。

步驟9:將DataFrame轉(zhuǎn)換為CSV文件

最后一步是創(chuàng)建一個(gè)摘要文件以收集所有結(jié)果,因此我們可以將其轉(zhuǎn)換為易于分析的格式,例如CSV文件。

 

  1. summary = df_pagespeed_results 
  2.  
  3. df_pagespeed_results.head() 
  4.  
  5. #Download csv file  
  6. summary.to_csv('pagespeed_results.csv'
  7. files.download('pagespeed_results.csv'

(請(qǐng)注意,此方法用于在Google Colab中轉(zhuǎn)換和下載CSV文件。)

進(jìn)一步探索數(shù)據(jù)

目前,我們導(dǎo)出的所有指標(biāo)都存儲(chǔ)為字符串,這是用于文本和字符的Python數(shù)據(jù)類型。

由于我們提取的某些指標(biāo)實(shí)際上是數(shù)字值,因此您可能希望將字符串轉(zhuǎn)換為數(shù)字?jǐn)?shù)據(jù)類型,例如整數(shù)和浮點(diǎn)數(shù)。

整數(shù),也稱為int,是整數(shù)的數(shù)據(jù)類型,例如1和10。

浮點(diǎn)數(shù),也稱為浮點(diǎn)數(shù),是十進(jìn)制點(diǎn)數(shù),例如1.0和10.1。

為了將字符串轉(zhuǎn)換為數(shù)字,我們需要執(zhí)行兩個(gè)步驟,第一步是將's'字符(用于表示秒)替換為空格。

我們通過(guò)在每列上使用.str.replace方法來(lái)執(zhí)行此操作。

  1. #Replace the 's' with a blank space so we can turn into numbers 
  2. df_pagespeed_results['Largest_Contentful_Paint'] = df_pagespeed_results.Largest_Contentful_Paint.str.replace('s'''
  3. df_pagespeed_results['First_Contentful_Paint'] = df_pagespeed_results.First_Contentful_Paint.str.replace('s'''
  4. df_pagespeed_results['Time_to_Interactive'] = df_pagespeed_results.Time_to_Interactive.str.replace('s'''
  5. df_pagespeed_results['Total_Blocking_Time'] = df_pagespeed_results.Total_Blocking_Time.str.replace('ms'''
  6. df_pagespeed_results['Speed_Index'] = df_pagespeed_results.Speed_Index.str.replace('s'''

然后,我們將使用.astype()方法將字符串轉(zhuǎn)換為整數(shù)或浮點(diǎn)數(shù):

  1. #Turn strings into intergers or floats 
  2. df_pagespeed_results['Largest_Contentful_Paint'] = df_pagespeed_results.Largest_Contentful_Paint.astype(float
  3. df_pagespeed_results['Cumulative_Layout_Shift'] = df_pagespeed_results.Cumulative_Layout_Shift.astype(int
  4. df_pagespeed_results['First_Contentful_Paint'] = df_pagespeed_results.First_Contentful_Paint.astype(float
  5. df_pagespeed_results['Time_to_Interactive'] = df_pagespeed_results.Time_to_Interactive.astype(float
  6. df_pagespeed_results['Speed_Index'] = df_pagespeed_results.Speed_Index.astype(float

完成此操作后,您可以使用多種不同的方法進(jìn)一步評(píng)估數(shù)據(jù)。

例如,您可以使用數(shù)據(jù)可視化庫(kù)(例如matplotlib或seaborn)來(lái)可視化指標(biāo),以及測(cè)量指標(biāo)如何隨時(shí)間變化并將結(jié)果分組為慢速,中速和快速存儲(chǔ)桶。

由于我們已經(jīng)介紹了很多內(nèi)容,因此我不會(huì)在本文中介紹這些內(nèi)容,但是如果您想了解更多信息,請(qǐng)隨時(shí)與我們聯(lián)系。

結(jié)論

該腳本最終幫助我測(cè)量了一組URL的關(guān)鍵頁(yè)面速度和性能指標(biāo),并可視化了結(jié)果以識(shí)別需要改進(jìn)的頁(yè)面。

它還允許您隨時(shí)間監(jiān)視結(jié)果并量化已進(jìn)行的改進(jìn)。

我還創(chuàng)建了一個(gè)腳本來(lái)專門(mén)測(cè)量三個(gè)核心Web Vitals的百分比和類別。

我希望這對(duì)希望自動(dòng)化其性能測(cè)試并進(jìn)一步探索PSI API的人有所幫助。

請(qǐng)隨時(shí)保存此Colab文件的副本,并使用它來(lái)幫助測(cè)量和監(jiān)視您的頁(yè)面速度,或者按照自己的步驟進(jìn)行操作。您可以在此處訪問(wèn)我在本文中分享的所有代碼段。

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2015-05-20 17:09:47

云存儲(chǔ)數(shù)據(jù)云端化

2020-07-06 14:39:18

知識(shí)圖譜思維

2017-06-12 14:26:10

項(xiàng)目經(jīng)理程序員項(xiàng)目管理

2025-03-31 09:00:00

漏洞AI數(shù)據(jù)泄露

2021-03-29 14:46:00

人工智能醫(yī)療傳感器

2025-04-07 08:15:00

大模型AI探人工智能

2014-07-24 16:35:16

2022-10-10 12:07:49

造車(chē)新能源Web3

2018-04-10 11:14:00

2020-04-01 17:39:57

天翼云新基建

2019-03-06 08:56:03

阿里云服務(wù)器VPN

2020-12-09 15:26:00

人工智能律師互聯(lián)網(wǎng)

2022-07-26 09:48:55

微服務(wù)服務(wù)AKF

2017-01-15 11:17:20

2020-04-22 09:42:17

大數(shù)據(jù)機(jī)器學(xué)習(xí)技術(shù)

2021-10-15 10:39:43

RabbitMQ隊(duì)列延遲

2021-03-26 08:41:11

Go語(yǔ)言Docker

2020-06-29 10:19:31

新基建運(yùn)營(yíng)商網(wǎng)絡(luò)

2022-04-14 08:21:35

數(shù)據(jù)庫(kù)查詢變慢MySQL

2013-02-26 09:46:10

大數(shù)據(jù)非結(jié)構(gòu)化數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)