有什么好的方法来阻止屏幕抓取工具从我的网站上抢走特定的内容?
可以肯定的是,这个问题对大多数Web 2.0拥护者都是亵渎神明,但是我确实认为,有时候我们可能不希望自己的网站很容易被他人的任意Web聚合器所窃取。至少足够,因此,如果他们确实想要这样做,则需要使他们手动完成。
我的想法是制作一个脚本,该脚本以绝对坐标将文本节点按通常在其各自的段落中出现的顺序定位,然后将这些文本节点以随机的,混杂的顺序存储在DOM中。当然,要使这样的系统正常工作(正确的自动换行,对齐,样式等),似乎类似于从头开始编写我自己的文档渲染器。
我还考虑将其与类似于CAPTCHA的东西结合起来,以微妙的方式修饰文本,从而阻碍屏幕抓取器,这些抓取器只能查看快照并识别字母或者其他内容。但这可能是想不通的。
唔。有没有人想出任何好的方法来做这样的事情?
解决方案
只需通过AJAX调用加载所有HTML,HTML就不会"出现"在大多数屏幕抓取工具的DOM中。
想法可能也会破坏所有的屏幕阅读器,因此我们在弄乱订单之前应该检查可访问性要求/法律。
考虑到刮板无法读取的所有内容,搜索引擎也无法读取。话虽如此,我们可以在页面加载后通过Javascript将内容注入文档中。
请不要使用绝对定位来重新组织加扰的页面。这不适用于移动设备,视障人士的屏幕阅读器和搜索引擎。
请不要添加验证码。它只会在人们看到网站之前将他们赶走。
我们提出的任何解决方案都是反网络的。互联网是关于共享的,我们必须善与恶。
如果必须执行某些操作,则可能只想使用Flash。我还没有看到链接农民获取Flash内容。但是出于第一段所述的所有原因,Flash是反Web的。
使用诸如ImageMagick之类的东西在SVG中渲染所有文本
我已经看过电视指南在客户端使用javascript解密。它不会停止确定的抓取程序,但会停止大多数随意的脚本编写。
所有的文本电视条目都是类似的ps10825('4VUknMERbnt0OAP3klgpmjs .... abd26')
,其中ps10825只是一个使用ps10825的密钥调用其解密功能的函数。显然,密钥是每次生成的。
在这种情况下,我认为足以阻止99%的使用Greasemonkey甚至wget脚本的人下载其电视指南,而不会看到他们的所有广告。
Alexa.com做了一些古怪的事情以防止刮擦。去这里看看交通等级
http://www.alexa.com/data/details/traffic_details/teenormous.com
要了解这一点,最好是尝试抓取一些站点。我已经抓了一些非常具有挑战性的网站,例如银行网站。我已经看到过许多尝试使抓取变得困难(例如加密,Cookie等)。归根结底,最好的防御是不可预测的加价。抓取工具在很大程度上依赖于能够在标记中找到"样式"。模式更改后,抓取逻辑就会失败。众所周知,刮板很脆,经常容易损坏。
我的建议是,将不可见的标记随机注入代码中。特别是在可能有趣的内容周围。做任何我们想做的事情,以使标记在每次调用时看起来都不同于刮板。
这些技术很少会停止确定的。 Alexa样式的垃圾HTML / CSS掩码很容易解决(只需解析CSS); AJAX / Javascript-DOM-insertion也很容易解决,尽管表单真实性令牌使这一点变得更加困难。
我发现提供官方API是最好的威慑措施:)
除非将文本呈现为图像是阻止随意刮板的好方法(但仍然可行)
YouTube还使用JavaScript混淆功能,这使得AJAX逆向工程更加困难