我有一个相当大的音乐网站,有一个很大的艺术家数据库。我一直注意到其他音乐网站在窃取我们网站的数据(我在这里和那里输入假艺人的名字,然后进行谷歌搜索)。

如何防止屏幕刮擦?这可能吗?


当前回答

好吧,正如所有帖子所说,如果你想让它对搜索引擎友好,那么机器人肯定会刮。

但你仍然可以做一些事情,它可能适用于60% - 70%的抓取机器人。

制作如下所示的检查器脚本。

如果一个特定的IP地址访问非常快,那么在几次访问(5-10次)后,将其IP地址+浏览器信息保存在文件或数据库中。

下一步

(这将是一个后台进程,并一直运行或在几分钟后调度。)制作另一个脚本,继续检查那些可疑的IP地址。

案例1。如果用户代理是一个已知的搜索引擎,如谷歌,Bing, Yahoo(你可以通过Google找到更多关于用户代理的信息)。那么你一定会看到http://www.iplists.com/。这个列表,并尝试匹配模式。如果它看起来像一个假的用户代理,那么要求在下次访问时填写验证码。(你需要多研究一下机器人的IP地址。我知道这是可以实现的,也尝试了IP地址的whois。这是有帮助的。)

例2。没有搜索机器人的用户代理:只需在下次访问时要求填写验证码。

其他回答

当然,这是可能的。为了100%的成功,让你的网站离线。

在现实中,你可以做一些事情,让抓取变得更加困难。谷歌进行浏览器检查,以确保您不是一个抓取搜索结果的机器人(尽管这和大多数其他事情一样,可以被欺骗)。

你可以做一些事情,比如在第一次连接到你的网站和随后的点击之间需要几秒钟。我不确定理想的时间是什么,也不知道具体怎么做,但这是另一个想法。

我相信还有其他一些人有更多的经验,但我希望这些想法至少有一定的帮助。

对不起,这真的很难做到……

我建议你礼貌地要求他们不要使用你的内容(如果你的内容是受版权保护的)。

如果是这样,他们不把它撤下来,那么你可以采取进一步的行动,给他们发一封停止通知信。

一般来说,无论你做什么来防止抓取可能最终会产生更负面的影响,例如可访问性,机器人/蜘蛛等。

方法一(小型场地适用): 提供加密/编码的数据。我使用python (urllib, requests, beautifulSoup等)对web进行了Scape,发现许多网站提供加密/编码的数据,这些数据在任何编程语言中都无法解密,因为加密方法不存在。

我在一个PHP网站上通过加密和最小化输出实现了这一点(警告:这对大型网站来说不是一个好主意),响应总是混乱的内容。

最小化PHP输出的例子(如何最小化PHP页面html输出?):

<?php
  function sanitize_output($buffer) {
    $search = array(
      '/\>[^\S ]+/s', // strip whitespaces after tags, except space
      '/[^\S ]+\</s', // strip whitespaces before tags, except space
      '/(\s)+/s'      // shorten multiple whitespace sequences
    );
    $replace = array('>', '<', '\\1');
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
  }
  ob_start("sanitize_output");
?>

方法二: 如果你不能阻止他们,那就给他们提供虚假/无用的数据作为回应。

方法三: 阻止常见的抓取用户代理,你会在主要/大型网站上看到这一点,因为你的user - agent不可能用“python3.4”来抓取它们。

方法四: 确保所有的用户标题都是有效的,我有时提供尽可能多的标题,使我的刮板看起来像一个真实的用户,其中一些甚至不是真实或有效的像en-FU:)。 下面是我通常提供的一些头文件的列表。

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}

屏幕抓取器通过处理HTML来工作。如果他们决定要获取你的数据,从技术上讲你也无能为力,因为人的眼球可以处理任何东西。法律上已经指出,你可能有一些追索权,这是我的建议。

但是,您可以通过使用非基于html的表示逻辑来隐藏数据的关键部分

为每个艺术家/专辑等生成一个Flash文件。 为每个艺术家内容生成一个图像。也许只是一个艺术家名字的图像,等等就足够了。通过将文本呈现到服务器上的JPEG/PNG文件并链接到该图像来实现这一点。

请记住,这可能会影响你的搜索排名。

你真的没有什么办法可以完全防止这种情况。刮刮者可以伪造他们的用户代理,使用多个IP地址等,并以正常用户的身份出现。你唯一能做的就是让文本在页面加载时不可用——用图像、flash或JavaScript加载。然而,前两个都是糟糕的想法,如果JavaScript没有为一些常规用户启用,最后一个将是可访问性问题。

如果他们对你的网站进行了猛烈的攻击,并且浏览了你所有的页面,你可以做一些速率限制。

不过还是有希望的。刮刮器依赖于您的网站的数据是一致的格式。如果你能随机分配,它可能会打碎他们的刮刀。比如在每次加载时更改页面元素的ID或类名等。但这需要做很多工作,我不确定是否值得。即便如此,只要有足够的投入,他们可能就能解决这个问题。