為SEO學(xué)習(xí)Python 分享7個(gè)技巧幫助你做數(shù)據(jù)分析工作
作為一名SEO專業(yè)人士,我的日常任務(wù)也在不斷學(xué)習(xí)。在去年年底開(kāi)始學(xué)習(xí)Python之后,我發(fā)現(xiàn)自己越來(lái)越多地將我所學(xué)的東西付諸實(shí)踐。
這包括相當(dāng)簡(jiǎn)單的任務(wù),例如比較字?jǐn)?shù)或狀態(tài)碼隨時(shí)間的變化,以及分析包括內(nèi)部鏈接和日志文件分析在內(nèi)的工作。

此外,Python還非常有用:
- 用于處理大型數(shù)據(jù)集
- 對(duì)于通常會(huì)使Excel崩潰并需要復(fù)雜分析以提取任何有意義的見(jiàn)解的文件。
Python如何幫助技術(shù)SEO
Python以多種方式授權(quán)SEO專業(yè)人員自動(dòng)化能力通常需要大量的時(shí)間來(lái)完成重復(fù)性的任務(wù)。
這意味著我們有更多的時(shí)間(和精力)用于重要的戰(zhàn)略工作和無(wú)法自動(dòng)化的優(yōu)化工作。
它還使我們能夠更有效地處理大量數(shù)據(jù),以便做出更多數(shù)據(jù)驅(qū)動(dòng)的決策,從而為我們的工作和客戶的工作提供有價(jià)值的回報(bào)。
事實(shí)上,有數(shù)據(jù)公司研究發(fā)現(xiàn),數(shù)據(jù)驅(qū)動(dòng)型組織獲得客戶的可能性是其他組織的23倍,而留住這些客戶的可能性是6倍。
它對(duì)備份你的任何想法或策略也很有幫助,因?yàn)槟憧梢杂媚銚碛械臄?shù)據(jù)來(lái)量化這些想法或策略,并在此基礎(chǔ)上做出決策,同時(shí)在努力實(shí)現(xiàn)事情時(shí)也有更大的杠桿作用。
將Python添加到SEO工作流
將Python添加到工作流中的最佳方法是:
- 想一想什么是可以自動(dòng)化的,尤其是在執(zhí)行乏味的任務(wù)時(shí)。
- 確定您正在執(zhí)行或已完成的分析工作中的任何差距。
我發(fā)現(xiàn)開(kāi)始學(xué)習(xí)的另一個(gè)有用的方法是使用你已經(jīng)訪問(wèn)過(guò)的數(shù)據(jù),并且提取有價(jià)值的見(jiàn)解使用Python
這就是我如何學(xué)會(huì)了我將在本文中分享的大部分東西。
學(xué)習(xí)Python并不是成為一個(gè)好的SEO專家的必要條件,但是如果你有興趣了解更多關(guān)于Python如何幫助你做好準(zhǔn)備的話。
開(kāi)始需要什么
為了從本文中獲得最佳效果,您需要以下幾點(diǎn):
- 來(lái)自網(wǎng)站的一些數(shù)據(jù)(例如,對(duì)網(wǎng)站的爬網(wǎng)、統(tǒng)計(jì)分析或搜索控制臺(tái)數(shù)據(jù))。
- 一個(gè)運(yùn)行代碼的IDE(集成開(kāi)發(fā)環(huán)境),對(duì)于入門(mén)我推薦Google Colab或Jupyter Notebook .
- 開(kāi)放的心態(tài)。這也許是最重要的一點(diǎn),不要害怕打破某些東西或犯錯(cuò)誤,找到問(wèn)題的原因和解決問(wèn)題的方法是我們作為SEO專業(yè)人士所做的工作的一個(gè)重要部分,因此將同樣的心態(tài)應(yīng)用于學(xué)習(xí)Python有助于減輕任何壓力。
1、善用網(wǎng)絡(luò)現(xiàn)有的資源
一個(gè)很好的開(kāi)始是嘗試Python中可用的許多庫(kù)中的一些。
有很多要探索的庫(kù),但我發(fā)現(xiàn)對(duì)SEO相關(guān)任務(wù)最有用的三個(gè)任務(wù)是Pandas,Requests和Beautiful Soup。
Pandas
Pandas是一個(gè)用于處理表數(shù)據(jù)的Python庫(kù),它允許在關(guān)鍵數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)幀的情況下進(jìn)行高級(jí)數(shù)據(jù)操作。
數(shù)據(jù)幀本質(zhì)上是Pandas的Excel電子表格但是,它不僅限于Excel的行和字節(jié)限制,而且比Excel快得多,因此效率更高。

開(kāi)始使用Pandas的最佳方法是獲取一個(gè)簡(jiǎn)單的CSV數(shù)據(jù),例如,對(duì)您的網(wǎng)站進(jìn)行爬網(wǎng),并將其保存在Python中作為一個(gè)DataFrame。
一旦你有了這個(gè)存儲(chǔ),你就可以執(zhí)行許多不同的分析任務(wù),包括聚合、透視和清理數(shù)據(jù)。
- import pandas as pd
- df = pd.read_csv("/file_name/and_path")
- df.head
requests
下一個(gè)庫(kù)名為requests,用于在Python中發(fā)出HTTP請(qǐng)求。
它使用不同的請(qǐng)求方法(如GET和POST)發(fā)出請(qǐng)求,結(jié)果存儲(chǔ)在Python中。
其中一個(gè)例子是一個(gè)簡(jiǎn)單的URL GET請(qǐng)求,它將打印出一個(gè)頁(yè)面的狀態(tài)代碼,然后可以使用它來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的決策函數(shù)。
- import requests
- #Print HTTP response from page
- response = requests.get('https://www.xxxxxxxx.com')
- print(response)
- #Create decision making function
- if response.status_code == 200:
- print('Success!')
- elif response.status_code == 404:
- print('Not Found.')
您還可以使用不同的請(qǐng)求,例如headers,它顯示關(guān)于頁(yè)面的有用信息,例如內(nèi)容類型和緩存響應(yīng)所需時(shí)間的時(shí)間限制。
- #Print page header response
- headers = response.headers
- print(headers)
- #Extract item from header response
- response.headers['Content-Type']
此外,還可以模擬特定的用戶代理,例如Googlebot,以便提取該特定bot在抓取頁(yè)面時(shí)看到的響應(yīng)。
- headers = {'User-Agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}
- ua_response = requests.get('https://www.xxxx.com/', headers=headers)
- print(ua_response)
Beautiful Soup
最后一個(gè)庫(kù)名為Beautiful Soup,用于從HTML和XML文件 .
它最常用于web抓取,因?yàn)樗梢詫TML文檔轉(zhuǎn)換為不同的Python對(duì)象。
例如,您可以獲取一個(gè)URL,并使用beautifulsoup和Requests庫(kù)一起提取頁(yè)面的標(biāo)題。
- #Beautiful Soup
- from bs4 import BeautifulSoup
- import requests
- #Request URL to extract elements from
- url= 'https://www.xxxxxxxxx.com/knowledge/technical-seo-library/'
- req = requests.get(url)
- soup = BeautifulSoup(req.text, "html.parser")
- #Print title from webpage
- title = soup.title
- print(title)
此外,Beautiful Soup允許您從頁(yè)面中提取其他元素,例如頁(yè)面上找到的所有a href鏈接。
- for link in soup.find_all('a'):
- print(link.get('href'))

2、分段分割頁(yè)面
第一個(gè)任務(wù)涉及到對(duì)網(wǎng)站的頁(yè)面進(jìn)行細(xì)分,這實(shí)際上是根據(jù)頁(yè)面的URL結(jié)構(gòu)或頁(yè)面標(biāo)題將頁(yè)面按類別分組。
首先,使用簡(jiǎn)單的正則表達(dá)式根據(jù)URL將網(wǎng)站分成不同的段:
- segment_definitions = [
- [(r'\/blog\/'), 'Blog'],
- [(r'\/technical-seo-library\/'), 'Technical SEO Library'],
- [(r'\/hangout-library\/'), 'Hangout Library'],
- [(r'\/guides\/'), 'Guides'],
- ]
接下來(lái),我們添加一個(gè)小函數(shù),它將遍歷URL列表并為每個(gè)URL分配一個(gè)類別,然后將這些段添加到包含原始URL列表的DataFrame中的新列中。
- use_segment_definitions = True
- def segment(url):
- if use_segment_definitions == True:
- for segment_definition in segment_definitions:
- if re.findall(segment_definition[0], url):
- return segment_definition[1]
- return 'Other'
- df['segment'] = df['url'].apply(lambda x: get_segment(x))

還有一種方法可以使用URL結(jié)構(gòu)在不必手動(dòng)創(chuàng)建片段的情況下對(duì)頁(yè)面進(jìn)行分段。這將獲取包含在主域后面的文件夾,以便對(duì)每個(gè)URL進(jìn)行分類。
同樣,這將向我們的DataFrame添加一個(gè)新列,其中包含生成的段。
- def get_segment(url):
- slug = re.search(r'https?:\/\/.*?\//?([^\/]*)\/', url)
- if slug:
- return slug.group(1)
- else:
- return 'None'
- # Add a segment column, and make into a category
- df['segment'] = df['url'].apply(lambda x: get_segment(x))
三、重定向相關(guān)性
如果我不了解使用Python可能實(shí)現(xiàn)的任務(wù),那么我將從未考慮過(guò)要完成此任務(wù)。
在遷移之后,當(dāng)重定向到位時(shí),我們希望通過(guò)查看每個(gè)頁(yè)面的類別和深度是否已更改或保持不變來(lái)確定重定向映射是否準(zhǔn)確。
這涉及到在遷移前和遷移后對(duì)站點(diǎn)進(jìn)行爬網(wǎng),并根據(jù)其URL結(jié)構(gòu)對(duì)每個(gè)頁(yè)面進(jìn)行分段,如上所述。
在這之后,我使用了一些簡(jiǎn)單的比較運(yùn)算符(它們內(nèi)置于Python中)來(lái)確定每個(gè)URL的類別和深度是否發(fā)生了更改。
- df['category_match'] = df['old_category'] == (df['redirected_category'])
- df['segment_match'] = df['old_segment'] == (df['redirected_segment'])
- df['depth_match'] = df['old_count'] == (df['redirected_count'])
- df['depth_difference'] = df['old_count'] - (df['redirected_count'])
由于這本質(zhì)上是一個(gè)自動(dòng)化的腳本,它將在每個(gè)URL中運(yùn)行以確定類別或深度是否已更改,并將結(jié)果作為新的數(shù)據(jù)幀輸出。
新的DataFrame將包含額外的列,如果它們匹配,則顯示True;如果不匹配,則顯示False。

就像在Excel中一樣,Pandas庫(kù)使您能夠基于原始數(shù)據(jù)幀的索引來(lái)透視數(shù)據(jù)。
例如,獲取遷移后有多少URL具有匹配的類別。

此分析將使您能夠查看已設(shè)置的重定向規(guī)則,并確定是否存在遷移前后差異較大的類別,這些類別可能需要進(jìn)一步調(diào)查。

4、內(nèi)部鏈接分析
分析內(nèi)部鏈接對(duì)于確定站點(diǎn)的哪些部分鏈接最多,以及發(fā)現(xiàn)改進(jìn)站點(diǎn)內(nèi)部鏈接的機(jī)會(huì)非常重要。
為了執(zhí)行此分析,我們只需要從web爬網(wǎng)中獲取一些數(shù)據(jù)列,例如,顯示頁(yè)面之間鏈接的任何度量。
再次,我們想分割這些數(shù)據(jù),以便確定網(wǎng)站的不同類別并分析它們之間的鏈接。
- internal_linking_pivot['followed_links_in_count'] = (internal_linking_pivot['followed_links_in_count']).apply('{:.1f}'.format)
- internal_linking_pivot['links_in_count'] = (internal_linking_pivot2['links_in_count']).apply('{:.1f}'.format)
- internal_linking_pivot['links_out_count'] = (internal_linking_pivot['links_out_count']).apply('{:.1f}'.format)
- internal_linking_pivot
透視表對(duì)于這種分析非常有用,因?yàn)槲覀兛梢酝敢曨悇e,以便計(jì)算每個(gè)類別的內(nèi)部鏈接總數(shù)。
Python還允許我們執(zhí)行數(shù)學(xué)函數(shù),以便獲得我們所擁有的任何數(shù)字?jǐn)?shù)據(jù)的計(jì)數(shù)、求和或平均值。
5、日志文件分析
另一個(gè)重要的分析與日志文件,以及我們可以在許多不同工具中收集到的這些數(shù)據(jù)。
您可以提取一些有用的見(jiàn)解,包括確定Googlebot對(duì)站點(diǎn)的哪些區(qū)域進(jìn)行爬網(wǎng)最多,以及監(jiān)視請(qǐng)求數(shù)隨時(shí)間的變化。
此外,它們還可以用來(lái)查看有多少不可索引或損壞的頁(yè)面仍在接收bot點(diǎn)擊,以解決爬網(wǎng)預(yù)算的任何潛在問(wèn)題。

對(duì)于每一個(gè)類別,最容易使用的就是根據(jù)數(shù)據(jù)段對(duì)URL進(jìn)行統(tǒng)計(jì),或者對(duì)每個(gè)數(shù)據(jù)段進(jìn)行統(tǒng)計(jì)。
如果你能夠訪問(wèn)歷史日志文件數(shù)據(jù),也有可能監(jiān)測(cè)谷歌訪問(wèn)你的網(wǎng)站的變化。

Python中也有很好的可視化庫(kù),如Matplotlib和Seaborn,它們?cè)试S您創(chuàng)建條形圖或折線圖,將原始數(shù)據(jù)繪制成易于跟蹤的圖表,顯示隨時(shí)間變化的比較或趨勢(shì)。

6、數(shù)據(jù)合并
使用Pandas庫(kù),還可以基于共享列(例如URL)組合數(shù)據(jù)幀。
一些有用的SEO合并示例包括將來(lái)自web爬網(wǎng)的數(shù)據(jù)與googleanalytics中收集的轉(zhuǎn)換數(shù)據(jù)相結(jié)合。
這將使用每個(gè)URL進(jìn)行匹配,并在一個(gè)表中顯示來(lái)自兩個(gè)源的數(shù)據(jù)。

以這種方式合并數(shù)據(jù)有助于為性能最好的頁(yè)面提供更多的見(jiàn)解,同時(shí)還可以識(shí)別性能不如預(yù)期的頁(yè)面。
合并類型
在Python中有兩種不同的合并數(shù)據(jù)的方法,默認(rèn)的方法是內(nèi)部合并,合并將發(fā)生在左數(shù)據(jù)幀和右數(shù)據(jù)幀中的值上。

但是,您也可以執(zhí)行外部合并,它將返回左側(cè)數(shù)據(jù)幀中的所有行,以及右側(cè)數(shù)據(jù)幀中的所有行,并盡可能匹配它們。
以及右合并或左合并將合并所有匹配的行,并保留不匹配的行(如果分別存在于右合并或左合并中)。
7、谷歌趨勢(shì)
還有一個(gè)很棒的圖書(shū)館,叫做PyTrends公司,這實(shí)際上允許您使用Python按比例收集Google趨勢(shì)數(shù)據(jù)。
有幾種API方法可用于提取不同類型的數(shù)據(jù)。
一個(gè)例子是一次跟蹤最多5個(gè)關(guān)鍵字的搜索興趣。

另一個(gè)有用的方法是返回某個(gè)主題的相關(guān)查詢,這將顯示一個(gè)介于0-100之間的Google Trends分?jǐn)?shù),以及一個(gè)百分比,顯示隨著時(shí)間的推移,關(guān)鍵字的興趣增加了多少。
這些數(shù)據(jù)可以很容易地添加到googlesheet文檔中,以便在googledatastudio儀表板中顯示。

總之
這些項(xiàng)目幫助我節(jié)省了大量手動(dòng)分析工作的時(shí)間,同時(shí)也讓我能夠從我所接觸到的所有數(shù)據(jù)中發(fā)現(xiàn)更多的見(jiàn)解。
我希望這能給你一些SEO項(xiàng)目的靈感,你可以開(kāi)始學(xué)習(xí)Python。