使用Python 进行竞争对手反向链接分析 [完整脚本]
使用此 Python 脚本分析反向链接,发现您与竞争对手之间的可见性差异。
质量是域权威(或 Ahrefs 的等效域评级),数量是引用域的数量。
同样,我们将在评估数量之前使用可用数据评估链接质量。
是时候编码了。
import reimport timeimport randomimport pandas as pdimport numpy as npimport datetimefrom datetime import timedeltafrom plotnine import *import matplotlib.pyplot as pltfrom pandas.api.types import is_string_dtypefrom pandas.api.types import is_numeric_dtypeimport uritools
pd.set_option(display.max_colwidth, None)%matplotlib inline
root_domain = johnsankey.co.ukhostdomain = www.johnsankey.co.ukhostname = johnsankeyfull_domain = https://www.johnsankey.co.uktarget_name = John Sankey
我们设置了文件目录,在一个文件夹中读取多个 Ahrefs 导出的数据文件,这比单独读取每个文件更快、更少无聊、更高效。
尤其是当你有超过 10 个时!
ahrefs_path = data/
OS 模块的 listdir() 函数允许我们列出子目录中的所有文件。
ahrefs_filenames = os.listdir(ahrefs_path)ahrefs_filenames.remove(.DS_Store)ahrefs_filenames
File names now listed below:
www.davidsonlondon.comrefdomains-subdomain__2022-03-13_23-37-29.csv,www.stephenclasper.co.ukrefdomains-subdoma__2022-03-13_23-47-28.csv,www.touchedinteriors.co.ukrefdomains-subdo__2022-03-13_23-42-05.csv,www.lushinteriors.corefdomains-subdomains__2022-03-13_23-44-34.csv,www.kassavello.comrefdomains-subdomains__2022-03-13_23-43-19.csv,www.tulipinterior.co.ukrefdomains-subdomai__2022-03-13_23-41-04.csv,www.tgosling.comrefdomains-subdomains__2022-03-13_23-38-44.csv,www.onlybespoke.comrefdomains-subdomains__2022-03-13_23-45-28.csv,www.williamgarvey.co.ukrefdomains-subdomai__2022-03-13_23-43-45.csv,www.hadleyrose.co.ukrefdomains-subdomains__2022-03-13_23-39-31.csv,www.davidlinley.comrefdomains-subdomains__2022-03-13_23-40-25.csv,johnsankey.co.uk-refdomains-subdomains__2022-03-18_15-15-47.csv
列出文件后,我们现在将使用 for 循环单独读取每个文件,并将它们添加到数据帧中。
在读取文件时,我们将使用一些字符串操作来创建一个新列,其中包含我们正在导入的数据的站点名称。
ahrefs_df_lst = list()ahrefs_colnames = list()
for filename in ahrefs_filenames:df = pd.read_csv(ahrefs_path + filename)dfsite = filenamedfsite = dfsite.str.replace(www., , regex = False)dfsite = dfsite.str.replace(.csv, , regex = False)dfsite = dfsite.str.replace(-.+, , regex = True)ahrefs_colnames.append(df.columns)ahrefs_df_lst.append(df)
ahrefs_df_raw = pd.concat(ahrefs_df_lst)ahrefs_df_raw
现在我们在单个数据框中拥有来自每个站点的原始数据。下一步是整理列名并使它们更易于使用。
尽管可以通过自定义函数或列表理解来消除重复,但对于初学者 SEO Pythonistas 来说,这是一种很好的做法,并且更容易逐步了解正在发生的事情。正如他们所说,“重复是掌握之母”,所以开始练习吧!
competitor_ahrefs_cleancols = ahrefs_df_rawcompetitor_ahrefs_cleancols.columns = col.lower() for col in competitor_ahrefs_cleancols.columnscompetitor_ahrefs_cleancols.columns = col.replace( ,_) for col in competitor_ahrefs_cleancols.columnscompetitor_ahrefs_cleancols.columns = col.replace(.,_) for col in competitor_ahrefs_cleancols.columnscompetitor_ahrefs_cleancols.columns = col.replace(__,_) for col in competitor_ahrefs_cleancols.columnscompetitor_ahrefs_cleancols.columns = col.replace((,) for col in competitor_ahrefs_cleancols.columnscompetitor_ahrefs_cleancols.columns = col.replace(),) for col in competitor_ahrefs_cleancols.columnscompetitor_ahrefs_cleancols.columns = col.replace(%,) for col in competitor_ahrefs_cleancols.columns
计数列和具有单值列(project)对于 groupby 和聚合操作很有用。
competitor_ahrefs_cleancolsrd_count = 1competitor_ahrefs_cleancolsproject = target_name
competitor_ahrefs_cleancols
列已清理,所以现在我们将清理行数据。
对于引用域,我们将连字符替换为零并将数据类型设置为整数(即整数)。
这也将针对链接域重复。
competitor_ahrefs_clean_dtypes = competitor_ahrefs_cleancols
competitor_ahrefs_clean_dtypesdofollow_ref_domains = np.where(competitor_ahrefs_clean_dtypesdofollow_ref_domains == -,0, competitor_ahrefs_clean_dtypesdofollow_ref_domains)competitor_ahrefs_clean_dtypesdofollow_ref_domains = competitor_ahrefs_clean_dtypesdofollow_ref_domains.astype(int)
# linked_domains
competitor_ahrefs_clean_dtypesdofollow_linked_domains = np.where(competitor_ahrefs_clean_dtypesdofollow_linked_domains == -,0, competitor_ahrefs_clean_dtypesdofollow_linked_domains)competitor_ahrefs_clean_dtypesdofollow_linked_domains = competitor_ahrefs_clean_dtypesdofollow_linked_domains.astype(int)
First seen 为我们提供了找到链接的日期点,我们可以将其用于时间序列绘图和导出链接年龄。
我们将使用 to_datetime 函数转换为日期格式。
# first_seencompetitor_ahrefs_clean_dtypesfirst_seen = pd.to_datetime(competitor_ahrefs_clean_dtypesfirst_seen,format=%d/%m/%Y %H:%M)competitor_ahrefs_clean_dtypesfirst_seen = competitor_ahrefs_clean_dtypesfirst_seen.dt.normalize()competitor_ahrefs_clean_dtypesmonth_year = competitor_ahrefs_clean_dtypesfirst_seen.dt.to_period(M)
要计算 link_age,我们只需从今天的日期中减去第一次看到的日期,然后将差值转换为数字。
# link agecompetitor_ahrefs_clean_dtypeslink_age = dt.datetime.now() competitor_ahrefs_clean_dtypesfirst_seencompetitor_ahrefs_clean_dtypeslink_age = competitor_ahrefs_clean_dtypeslink_agecompetitor_ahrefs_clean_dtypeslink_age = competitor_ahrefs_clean_dtypeslink_age.astype(int)competitor_ahrefs_clean_dtypeslink_age = (competitor_ahrefs_clean_dtypeslink_age/(3600 * 24 * 1000000000)).round(0)
目标列帮助我们区分“客户”网站与竞争对手,这对以后的可视化很有用。
competitor_ahrefs_clean_dtypestarget = np.where(competitor_ahrefs_clean_dtypessite.str.contains(johns),1, 0)competitor_ahrefs_clean_dtypestarget = competitor_ahrefs_clean_dtypestarget.astype(category)
competitor_ahrefs_clean_dtypes
既然数据已经按照列标题和行值进行了清理,我们就可以开始着手分析了。
我们从链接质量开始,我们将接受域评级 (DR) 作为衡量标准。
让我们首先通过使用 geom_bokplot 函数绘制分布来检查 DR 的分布属性。
comp_dr_dist_box_plt = (ggplot(competitor_ahrefs_analysis.loccompetitor_ahrefs_analysisdr 0,aes(x = reorder(site, dr), y = dr, colour = target)) +geom_boxplot(alpha = 0.6) +scale_y_continuous() +theme(legend_position = none,axis_text_x=element_text(rotation=90, hjust=1)))
comp_dr_dist_box_plt.save(filename = images/4_comp_dr_dist_box_plt.png,height=5, width=10, units = in, dpi=1000)comp_dr_dist_box_plt
该图并排比较了网站的统计属性,最值得注意的是,四分位间距显示了大多数引用域在域评级方面的位置。
我们还看到 John Sankey 具有第四高的中值域评级,与其他网站的链接质量相比,效果很好。
与其他领域相比,William Garvey 拥有最多样化的 DR,这表明链接获取的标准稍微宽松一些。谁知道。
这就是质量。来自引用域的链接量如何?
为了解决这个问题,我们将使用 groupby 函数计算引用域的运行总和。
competitor_count_cumsum_df = competitor_ahrefs_analysis
competitor_count_cumsum_df = competitor_count_cumsum_df.groupby(site, month_year)rd_count.sum().reset_index()
扩展功能允许计算窗口随着行数的增加而增长,这就是我们实现运行总和的方式。
competitor_count_cumsum_dfcount_runsum = competitor_count_cumsum_dfrd_count.expanding().sum()
competitor_count_cumsum_df
结果是一个包含站点、month_year 和 count_runsum(运行总和)的数据框,它采用完美的格式来提供图表。
competitor_count_cumsum_plt = (ggplot(competitor_count_cumsum_df, aes(x = month_year, y = count_runsum,group = site, colour = site)) +geom_line(alpha = 0.6, size = 2) +labs(y = Running Sum of Referring Domains, x = Month Year) +scale_y_continuous() +scale_x_date() +theme(legend_position = right,axis_text_x=element_text(rotation=90, hjust=1)))
competitor_count_cumsum_plt.save(filename = images/5_count_cumsum_smooth_plt.png,height=5, width=10, units = in, dpi=1000)
competitor_count_cumsum_plt
该图显示了自 2014 年以来每个站点的引用域数量。
当每个站点开始获取链接时,我发现每个站点的不同起始位置非常有趣。
例如,William Garvey 一开始就有超过 5,000 个域名。我很想知道他们的公关公司是谁!
我们还可以看到增长率。例如,虽然 Hadley Rose 在 2018 年开始获取链接,但事情在 2021 年中期左右才真正起飞。
你总是可以做更科学的分析。
例如,上述内容的一个直接和自然的扩展是结合质量(DR)和数量(体积),以便更全面地了解网站在场外 SEO 方面的比较。
其他扩展是为您自己和您的竞争对手网站模拟那些引用域的质量,以查看哪些链接功能(例如链接内容的字数或相关性)可以解释您和您的竞争对手之间的可见性差异.
使用Python 进行竞争对手反向链接分析 [完整脚本] https://cdnanqi.cn/wangluoyingxiao/17058.html
400电话办理