Anonim

我为一个客户经营一个网站,他们在其中显示一个庞大的信息数据库,这些信息多年来一直准确而缓慢地收集到。 他们正在各地的网上查找数据。 这很可能是由于抓取工具逐页浏览并将其所需信息提取到自己的数据库中所致。 而且,如果您想知道,他们知道这是他们的数据,因为网站上每个类别中都植入了一条数据。

过去几天,我对此进行了大量研究,可以告诉您,没有一个完美的万能解决方案。 我发现有几件事情要做,但是要使他们更难做到这一点。 这就是我为客户实施的。

合并的分页数据

如果您有很多分页数据,并且只是通过在URL末尾附加一个不同的数字(即http://www.domain.com/category/programming/2)来对数据进行分页,那么您正在履带的工作就容易得多。 第一个问题是,它的图案易于识别,因此在这些页面上松动放置刮板很容易。 第二个问题,无论该类别中后续页面的URL如何,很可能会有下一个和上一个链接供其锁定。

通过使用javascript加载分页数据而无需重新加载页面,这使许多刮板的工作变得十分复杂。 Google直到最近才开始解析页面上的javascript。 像这样重新加载数据几乎没有什么缺点。 您需要提供更少的页面供Google索引,但是从技术上讲,分页数据无论如何都应该通过规范化指向根类别页面。 Ajaxify分页的数据页。

随机化模板输出

抓取工具通常会针对您的数据进行略微定制。 他们将锁定标题的特定div ID或类,用于描述的每一行的第3个单元格,等等。对于大多数抓取工具而言,存在一种易于识别的模式,可以处理来自同一表的大多数数据,由相同的模板显示。 随机分配div ID和类名,以0宽度随机插入空白表列。 在一页纸上的表格中显示数据,在样式div中显示数据,在另一模板上显示组合数据。 通过以可预测的方式显示您的数据,可以以可预测的方式准确地抓取数据。

蜜罐

这很简单。 我在有关防止站点抓取的几页上遇到了这种方法。

  • 在服务器上创建一个名为gotcha.html的新文件。
  • 在robots.txt文件中,添加以下内容:
    用户代理: *
    禁止:/gotcha.html

    这告诉所有的机械手和蜘蛛将您的站点编入索引,而不是索引文件gotcha.html。 任何普通的网络爬网程序都会遵守您的robots.txt文件的要求,并且不会访问该文件。 即Google和Bing。 您可能实际上想要实施此步骤,请等待24个小时,然后再进行下一步。 这样可以确保在更新robots.txt文件时,抓取工具不会因为被抓取而被您意外阻止。
  • 在您网站的某处放置指向gotcha.html的链接。 没关系,在哪里。 我建议在页脚中,但是,请确保此链接在CSS中不可见:display:none;
  • 现在,记录访问此页面的人员的IP /常规信息并将其阻止。 另外,您可以想出一个脚本来为他们​​提供不正确的垃圾数据。 或者,也许是您给他们的好消息。

普通的网络查看者将看不到该链接,因此不会意外单击该链接。 信誉良好的抓取工具(例如Google)将尊重您的robots.txt的意愿,而不访问该文件。 因此,唯一有意跨过此页面的计算机是那些有恶意的计算机,或者是有人在查看您的源代码并随机单击(如果发生的话,很好)。

有一些原因可能并不总是有效。 首先,许多抓取工具的功能不像普通的网络抓取工具,并且不仅仅是通过跟踪网站上每个页面的每个链接来发现数据。 刮板通常用于固定在某些页面上并且仅遵循某些结构。 例如,一个刮板可能在类别页面上启动,然后被告知只能访问该段中带有/ data字样的URL。 其次,如果某人与其他人在同一网络上运行其抓取工具,并且使用了共享IP,则将禁止整个网络。 您确实必须拥有一个非常受欢迎的网站,这才是一个问题。

实时将数据写入图像

查找较小的数据字段,不必一定要包含较长的文本字符串,因为这会使页面样式更加困难。 将这些数据输出到图像中,我感到非常有信心,几乎每种编程语言都有一些方法可以动态地将文本写入图像(在php,imagettftext中)。 这对于数字值可能是最有效的,因为数字提供了更为微不足道的SEO优势。

另类

这不是该项目的选择。 在经过一定量的浏览量后需要登录,或者在未登录的情况下显示有限数量的数据。即,如果您有10列,则仅对未登录的用户显示5。

不要犯这个错误

不要费心尝试根据机器人的用户代理提出某种解决方案。 知道自己在做什么的刮板很容易将这些信息欺骗。 例如,谷歌机器人可以很容易地模拟。 您极有可能不想禁止Google。

防止刮擦现场