你刚刚获得了一个新的大长期账户。 你需要对这个行业有一个正确的了解,它是如何结构的,以及领导者是谁,这样你就可以帮助你的客户建立牢固的关系,并在这个行业建立强大的思想领导力。

找到这些人的一种方法是通过行业出版物,其中包含有关战略和行业最佳实践的内容的领导者。

在本教程中,我们将使用抓取和抓取来创建这样一个数据库的核心-一个影响者你可以利用。 我将使用Python,你可以得到一个互动版本如果您想跟随教程,请修改代码,或稍后将其用作模板。

为了使它熟悉,该行业是在线营销和广告行业,出版物是SEMrush博客,爬虫是开源的副词,副词爬行者。

在撰写本文时,这个博客有393作者,每个作者都有一个个人资料页面。 您可以手动复制和粘贴他们的所有配置文件和链接,但您的时间比这更有价值。

准备(要提取的页面和数据元素)

完整的博客列表与每个博客的个人资料页面的链接可以在几个页面上找到这个模板:

https://www.塞姆鲁什.com/blog/作者/all/?page={n}-其中"n"是一个从一到十四的数字。

我们首先从生成这些页面的列表开始。 爬行器将被指示从这里开始。

创建包含指向博主个人资料链接的Url列表的代码创建包含指向博主个人资料链接的Url列表的代码

从这些页面中,爬虫应该遵循链接,并从每个配置文件页面中使用CSS选择器提取我们感兴趣的某些元素。 如果您不熟悉CSS(或XPath)选择器,它们基本上是一种使用比"列表项"更明确和具体的语言指定页面部分的方式,但也是一种与我们思考和查看页面的方式相

您很可能不希望页面中的所有链接。 您通常需要类似"页面顶部具有社交媒体图标的所有链接"。

我使用一个很好的浏览器工具,称为选择;选择帮我找到选择者的名字。 一旦您激活它,您在页面的一部分上所做的任何点击都会以绿色突出显示,以及所有类似的元素。 如果你想更具体,你可以点击其他元素来取消选择它们。

在下面的示例中,我首先点击了LinkedIn图标,该图标还选择了页面上的其他几个链接。 然后,一旦我点击主页图标,它取消选择所有其他元素(这就是为什么它现在是红色的-见下图),我得到了对应于这个特定元素的选择器。

在页面底部,您可以看到.b-社交链接__项目_ico_linkedin,这将明确识别这些页面上的LinkedIn链接。 如果需要,还可以单击XPath按钮以获取等效模式。 所以这就是我们如何向爬虫指定我们想要的元素。 见见A.J.,我们的历史冠军!

使用CSS和/或XPath选择器提取页面元素 example使用CSS和/或XPath选择器提取页面元素

我对其他元素也做了同样的事情,它们在下面这个{key:value}映射(Python字典)中被命名。

键可以根据需要命名,它们将成为爬网输出文件中的列名。 这些值是爬网程序将提取的值。 请注意,选择器以::文字::attr(href). 如果你不指定,你仍然会得到正确提取的链接,但你会得到整个链接对象:

CSS选择器:映射到提取模式的名称 code exampleCSS选择器:映射到提取模式的名称

所以现在,我们已经准备好开始页面,并且我们有我们想要提取的元素。 要爬网,我们使用下面的命令:

指定各种选项的爬网命令 code example指定各种选项的爬网命令

让我解释一下:

  • 将广告导入adv,adv:激活广告包并使用别名adv,adv把它称为简写。
  • 爬行是用于爬网的函数的名称,它需要一些参数来自定义其行为。
  • url_list=作者_页面:这是爬行器将开始爬行的地方。作者_页面是我们给包含链接到博客的配置文件的十四个Url列表的名称。
  • 输出文件:这是我们希望保存爬网数据的地方。 提供一个描述性的名称和日期总是很好的。 ".jl"是"jsonlines",这是一种灵活的数据存储方式,其中每个URL的数据将保存在文件中的独立行中。 我们将其导入为DataFrame,然后可以保存为CSV格式,以便于共享。
  • follow_links=True:如果设置为False,那么爬虫只会抓取指定的页面,这也被称为"列表模式"。 在这种情况下,我们希望爬虫跟随链接。 这意味着对于每个抓取的页面,所有链接都将被遵循。 现在我们不想抓取整个网站,所以我们使用下面的设置来限制我们的抓取。
  • 'DEPTH_LIMIT':1:是的,请遵循您在初始页面上找到的链接,并抓取您找到的页面,但在初始页面之后只有一个级别。
  • 选择器:指我们创建的字典,用来指定我们要提取的数据。

爬行有许多不同的选项,您可以查看文档如果您对更多细节感兴趣。 这需要几分钟的时间,现在我们可以使用pandas函数打开文件read_json,并通过指定线=真(因为它是jsonlines)。

Code to command to open the 爬行 output file using pandas使用pandas打开爬网输出文件的命令

现在我们已经定义了变量塞姆鲁什以引用爬网数据框。 我们先来看看它包含的列。 正如你在下面看到的,有八十三列。 大多数是固定的,这意味着它们将始终存在于任何爬网文件中(如"title","h1","meta_desc"等)。),有些是动态的。

例如,OpenGraph数据可能存在于页面上,也可能不存在,因此某些列仅在页面上时才会显示。 具有社交网络名称和我们上面指定的名称的列只有在我们像本例中那样明确指定它们时才会出现。

Screenshot of a list of all the columns in the 爬行 file爬网文件中所有列的列表

由于这不是SEO审计,我们只对与作者相关的提取数据感兴趣;我们现在将创建数据的子集。 它基本上说我们想要塞姆鲁什(称为作者)列的单元格的位置alltime_rank不是空的,并且列是"h1","url"或我们指定用于提取的任何键。

A list of 作者 table作者表的随机样本(截断值以适应屏幕)

我们快结束了。 需要对数据进行一些清理。

清理数据

您可能已经注意到alltime_rank列,以及它包含两个值的事实;一个用于帖子中的排名,另一个用于评论中的排名。 下面的代码将两个值拆分并删除有噪声的字符。

Code to remove unnecessary characters from 从"alltime_rank"中删除不必要字符的代码

现在我们可以创建两个单独的列,每个级别一个,并确保它们是整数,以便我们可以按这些列进行排序。 在某些情况下,博主没有评论等级,我们给他们一个等级为零。

Code to create two new columns from 从"alltime_rank"创建两个新列的代码

最后一步。 列职业标题rank_名称在开头和结尾包含一些空格,所以我们删除它。 我们还删除出现在摘要列中的分隔符,这是两个@字符"@@"。

这是因为许多摘要中包含链接,并且它们被提取为三个或四个元素,因此我们删除分隔符。 最后,我们将"h1"重命名为"name",将"url"重命名为"塞姆鲁什_profile",按"alltime_rank_posts"排序,并删除"alltime_rank"列。

我们完了!

Showing python code to make final edits代码进行最终编辑,和前十名博客(值被截断以适应屏幕)

让我们快速检查工作似乎是否正确。 让我们看看我们有多少行和列作者:

showing python code for 作者获取数据框的形状(行数和列数)

388行13列。 他们不是393吗?

这是真的。 似乎有五个博客拥有特殊的个人资料页面,这些页面具有相同的数据,但设计不同(不同的CSS选择器)。 这些是博客的"专栏作家"。 我已经手动提取了他们的数据并将它们添加到表格中,您可以在最后看到塞姆鲁什_blog_作者。csv档案.

一个非常乐观的人曾经在地板上发现了一个马蹄铁,并立即想到:"哦,现在我只需要三个马蹄铁和一匹马!"

这份名单只有一个马蹄铁。

马是实际与那些人交谈的过程,建立真正的关系,并找到一个有意义的方式为网络做出贡献。

现在您已经拥有了所有Twitter帐户的列表,您可能需要创建一个列表来跟踪您感兴趣的人。 您可能只对一个子集感兴趣,因此您可以通过标题或摘要过滤包含"内容","SEO","付费"或任何您感兴趣的配置文件。

该博客以多种语言发布,因此您可以为另一种语言执行相同的操作。 有了所有的LinkedIn个人资料,您可以考虑创建或加入一个专家组并邀请人们加入。

祝你好运!

雷切尔 汉德利
Rachel是一名资深内容作家,在内容营销和SEO方面拥有12年以上的经验。她曾在代理机构工作,为各种品牌制定和执行内容战略,并在内部推动SaaS初创公司的有机增长。