搜索引擎如何抓取网页(网络爬虫很难检测和验证爬虫的方法有什么区别?)

优采云 发布时间: 2021-10-17 15:23

  搜索引擎如何抓取网页(网络爬虫很难检测和验证爬虫的方法有什么区别?)

  我们生活在互联网革命的时代。每天,越来越多的 网站 从纯 HTML 切换到富含 JavaScript 的 网站。尽管用户可以从现代技术中受益(如果他们愿意更新浏览器),但网络爬虫很难做到这一点。

  在搜索市场,谷歌是无可争议的领导者。它不仅在市场份额上领先,而且在技术上也处于领先地位。然而,即使是谷歌也有一些限制。Googlebot 不会像普通用户一样与您的 网站 互动,这可能会阻止它发现您的某些内容,尤其是当它依赖 JavaScript 时。

  一种解决方案是为爬虫提供 HTML 文件的预渲染版本,而不是 JavaScript 代码。这种技术不被视为伪装,是谷歌允许的。

  为了做到这一点,我们必须能够检测请求是由用户还是机器人发出的。

  让我们从一些基本知识开始。

  

  什么是爬虫?

  如果您正在寻找一种检测和验证爬虫的方法,您可能已经知道它们是什么。然而,爬虫(有时称为蜘蛛)是爬网的计算机程序(机器人)。换句话说,他们访问网页,找到指向更多页面的链接,然后访问它们。他们通常会映射稍后找到的内容以用于搜索目的(索引),或帮助开发人员诊断他们的 网站 问题。

  为什么会有人想要检测它们?

  如果您拥有一个 网站 并且希望在搜索结果中可见,例如 Google 搜索结果,您需要先被其爬虫访问。他们必须能够抓取您的 网站 并将您的内容编入索引。

  如果您在 网站 上发现了 SEO 问题,检查 Googlebot 请求的服务器日志可能是您诊断问题所需采取的步骤之一。

  还有更具体的用途。例如,在某些国家/地区,您可能会被*敏*感*词*强制限制对您的 网站 的访问。在阻止用户的同时,您应该允许来自该国家/地区的搜索机器人访问,特别是如果该国家/地区恰好是美国(Googlebot 主要从美国抓取)。

  正如开头提到的,越来越多的 JavaScript 在 web 上的使用对用户来说肯定是有好处的,但是渲染 JS 对搜索引擎来说是一个挑战。如果您的 网站 没有被机器人正确处理,或者您的内容经常变化,您应该动态呈现您的页面并将呈现的 HTML 而不是 JavaScript 代码提供给爬虫。

  

  显然,为了做到这一点,您必须知道请求是由真实用户还是爬虫发出的。

  用户代理检测-你好,我叫 Googlebot

  

  当您浏览网页时,您有时可能会感到匿名。但是,您的浏览器从来没有。它发出的每个请求都必须用其名称签名,称为用户代理。

  例如Chrome浏览器的用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/94.0.4606.81 Safari/537.36。

  机器人也有独特的用户代理。例如,以下名称属于桌面版 Googlebot:Mozilla/5.0 (compatible; Googlebot/2.1; +)

  他们不能撒谎吗?

  真正的 Googlebot 不会具有欺骗性,而是会以其真实姓名进行自我介绍。

  但是,还有其他可能有害的漫游器会使用 Googlebot 的名称进行自我介绍。某些浏览器还可以更改用户代理。

  例如,您可以使用 Google Chrome Inspect 工具来伪造 Googlebot。我们在做SEO的时候,经常会访问页面,甚至爬取整个网站,自我介绍为Googlebot进行诊断。

  但是,如果您正在寻找一种方法来检测来自特定机器人的所有请求,并且您不介意包括来自对其身份撒谎的来源的请求,那么用户代理检测方法是最容易和最快实现的。

  身份验证方法

  如果您需要正确验证请求的来源,则需要检查发出请求的 IP 地址。

  在这件事上撒谎是非常困难的。您可以使用 DNS 代理服务器并隐藏真实 IP,但这会暴露代理的 IP,这是可识别的。如果您可以识别来自爬虫 IP 范围的请求,则您已完成设置。

  一些抓取工具提供 IP 列表或范围供您使用,但大多数抓取工具(包括 Googlebot)不提供。并且有充分的理由不这样做。尽管如此,它们还是提供了一种验证请求的 IP 的方法。

  在我解释如何执行此操作之前,让我们回顾和探索您应该验证爬虫请求的场景。

  我们将探索的第一个场景是服务器日志分析。您绝对不希望访问您的 网站 的讨厌爬虫在您的日志中显示为 Googlebot。想象一下,由于某种原因,你的网站的一部分没有被索引,因为它在robots.txt中被屏蔽了,但是在你的日志中,你可以看到这部分的点击是由不同的引起的,它是由关心robots.txt的爬虫工具。如果不过滤爬虫,如何判断真正的Googlebot是否可以访问这些页面?

  您真正想要避免的另一种情况是使用 网站 的预渲染版本来提供爬虫。这在两个方面是有害的。第一:预渲染需要服务器处理时间。这个成本是不可忽视的,很多请求会显着影响你的性能!您只想为您关心的爬虫进行渲染。第二:呈现 JavaScript 可能很困难。如果那些烦人的爬虫会得到未渲染的 JavaScript,那么其中一些很可能无法窃取您的内容。

  好的,现在我们开始看看如何确定搜索引擎爬虫的IP地址。

  IP范围

  如上所述,一些流行的搜索引擎爬虫提供静态 IP 列表或范围。我会在这里列出一些。

  鸭鸭去:

  

  DuckDuckBot IP 地址列表

  :

  

  百度蜘蛛IP列表

  Twitter 和 Facebook 允许您通过运行以下 Bash 命令来下载他们当前的 IP 列表。

  

  Bash 是一个 Linux 命令行环境。

  Googlebot 验证

  

  GoogleBot IP 列表

  必应

  

  必应机器人IP列表

  白名单

  此时,您可能会问自己,为什么 Google 没有像 Facebook 那样发布他们的 IP 列表。答案很简单:他们的 IP 范围将来可能会发生变化。这样的列表肯定会在某些服务器配置中幸存下来,使它们在未来容易受到欺骗。

  尽管如此,您不应该对每个请求都使用 find 方法!这将缩短您的第一个字节时间 (TTFB) 并最终减慢您的 网站 速度。您要做的是创建一个临时 IP 白名单。

  基本思想是,当您收到来自 Googlebots 用户代理的请求时,首先检查您的白名单。如果它在列表中,您就知道它是一个有效的 Googlebot。

  如果来自不在白名单中的 IP 地址,则需要执行 nslookup。如果地址验证是肯定的,则进入白名单。

  请记住,白名单是临时的。您应该定期删除或重新检查所有 IP 地址。如果您收到大量错误请求,您可能还需要考虑使用黑名单来排除此类请求,而无需进行 DNS 查找。

  您将在下面找到一个代表上述想法的简单图表。

  

  概括

  在开始实施这些解决方案之前,先问问自己真正需要什么。如果您需要检测机器人并且不介意误报,那么请进行最简单的用户代理检测。然而,当你在寻找确定性时,你需要开发一个 DNS 查找程序。

  这样做时,请记住,您确实希望避免增加服务器响应时间,DNS 查找肯定会做到这一点。实现一些缓存搜索结果的方法,但不要保存太久,因为搜索引擎机器人的IP地址可能会发生变化。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线