我有一个相当大的音乐网站,有一个很大的艺术家数据库。我一直注意到其他音乐网站在窃取我们网站的数据(我在这里和那里输入假艺人的名字,然后进行谷歌搜索)。
如何防止屏幕刮擦?这可能吗?
我有一个相当大的音乐网站,有一个很大的艺术家数据库。我一直注意到其他音乐网站在窃取我们网站的数据(我在这里和那里输入假艺人的名字,然后进行谷歌搜索)。
如何防止屏幕刮擦?这可能吗?
当前回答
屏幕抓取器通过处理HTML来工作。如果他们决定要获取你的数据,从技术上讲你也无能为力,因为人的眼球可以处理任何东西。法律上已经指出,你可能有一些追索权,这是我的建议。
但是,您可以通过使用非基于html的表示逻辑来隐藏数据的关键部分
为每个艺术家/专辑等生成一个Flash文件。 为每个艺术家内容生成一个图像。也许只是一个艺术家名字的图像,等等就足够了。通过将文本呈现到服务器上的JPEG/PNG文件并链接到该图像来实现这一点。
请记住,这可能会影响你的搜索排名。
其他回答
大多数已经说过了,但是你考虑过CloudFlare的保护吗?我的意思是:
其他公司可能也这么做,CloudFlare是我知道的唯一一家。
我很确定这会使他们的工作复杂化。我还曾经因为速率限制而试图废弃一个受CloudFlare保护的网站的数据(我使用了简单的AJAX请求循环),导致IP被自动禁用了4个月。
你真的没有什么办法可以完全防止这种情况。刮刮者可以伪造他们的用户代理,使用多个IP地址等,并以正常用户的身份出现。你唯一能做的就是让文本在页面加载时不可用——用图像、flash或JavaScript加载。然而,前两个都是糟糕的想法,如果JavaScript没有为一些常规用户启用,最后一个将是可访问性问题。
如果他们对你的网站进行了猛烈的攻击,并且浏览了你所有的页面,你可以做一些速率限制。
不过还是有希望的。刮刮器依赖于您的网站的数据是一致的格式。如果你能随机分配,它可能会打碎他们的刮刀。比如在每次加载时更改页面元素的ID或类名等。但这需要做很多工作,我不确定是否值得。即便如此,只要有足够的投入,他们可能就能解决这个问题。
生成HTML, CSS和JavaScript。编写生成器比编写解析器更容易,因此可以以不同的方式生成每个服务页面。这样就不能再使用缓存或静态内容了。
迟到的回答——而且这个答案可能不是你想听到的……
我自己已经编写了许多(几十个)不同的专门的数据挖掘抓取程序。(只是因为我喜欢“开放数据”哲学)。
在其他答案中已经有很多建议了-现在我将扮演魔鬼倡导者的角色,并将扩展和/或纠正它们的有效性。
第一:
如果有人真的想要你的数据 你不能有效地(技术上)隐藏你的数据 数据是否应该对“常规用户”公开访问
试图使用一些技术障碍是不值得的麻烦,导致:
对你的老用户来说,就是让他们的用户体验变差 到常规的和受欢迎的机器人(搜索引擎) 等等……
纯HMTL——最简单的方法是解析纯HTML页面,使用定义良好的结构和css类。例如,这是足够的检查元素与Firebug,并使用正确的xpath,和/或CSS路径在我的刮刀。
你可以动态地生成HTML结构,也可以动态地生成CSS类名(和CSS本身)(例如,通过使用一些随机的类名)-但是
您希望以一致的方式将信息呈现给常规用户 例如,再一次分析页面结构来设置刮刀就足够了。 它可以通过分析一些“已知的内容”自动完成 某人已经知道(通过早先的搜集),例如: 关于"菲尔·柯林斯"的信息 足够显示“phil collins”页面,并(自动)分析页面的结构“today”:)
你不能为每一个回应都改变结构,因为你的老用户会讨厌你。而且,这样会给您(保养)带来更多的麻烦,而不是给刮板带来麻烦。XPath或CSS路径由抓取脚本从已知内容自动确定。
Ajax -一开始有点难,但很多时候加速了抓取过程:)-为什么?
当分析请求和响应时,我只是设置了自己的代理服务器(用perl写的),我的firefox正在使用它。当然,因为它是我自己的代理——它是完全隐藏的——目标服务器将其视为普通浏览器。(因此,没有X-Forwarded-for等报头)。 基于代理日志,大多数情况下可以确定ajax请求的“逻辑”,例如,我可以跳过大部分html抓取,只使用结构良好的ajax响应(主要是JSON格式)。
所以,ajax帮助不大…
一些更复杂的页面使用了大量的javascript函数。
这里可以使用两种基本方法:
解包和理解JS,并创建一个遵循Javascript逻辑的scraper(艰难的方式) 或者(最好是自己使用)-只是使用Mozilla和Mozrepl进行刮擦。例如,真正的抓取是在全功能javascript支持的浏览器中完成的,它被编程为点击正确的元素,并直接从浏览器窗口抓取“解码”的响应。
这样的刮取速度很慢(刮取是在普通浏览器中完成的),但它确实很慢
非常容易设置和使用 而且几乎不可能对抗它:) 无论如何,都需要“慢”来对抗“阻塞快速的相同IP请求”。
基于用户代理的过滤根本没有帮助。任何认真的数据挖掘者都会在他的scraper中将其设置为正确的值。
要求登录-没有帮助。最简单的方法打败它(没有任何分析和/或脚本登录协议)只是登录到网站作为普通用户,使用Mozilla,然后运行基于Mozrepl的刮刀…
请记住,要求登录有助于匿名机器人,但无助于那些想要窃取您的数据的人。他只是把自己注册为普通用户。
使用框架也不是很有效。这是许多现场电影服务使用,它不是很难被击败。帧只是另一个需要分析的HTML/Javascript页面…如果数据值得麻烦,数据挖掘器将进行所需的分析。
基于ip的限制根本无效——这里有太多的公共代理服务器,还有TOR…:)它不会减慢抓取(对于那些真正想要你的数据的人)。
非常困难的是抓取隐藏在图像中的数据。(例如,简单地将数据转换为图像服务器端)。使用“tesseract”(OCR)可以帮助很多次,但老实说,数据必须值得刮刀的麻烦。(很多时候这并不值得)。
另一方面,你的用户也会因此讨厌你。我自己,(即使在不抓取的时候)讨厌那些不允许将页面内容复制到剪贴板的网站(因为信息在图像中,或者(愚蠢的那些)试图绑定到右键单击一些自定义Javascript事件。:)
最难的是使用java applet或flash的站点,applet本身在内部使用安全https请求。但是仔细想想——你的iPhone用户会有多开心……,)。因此,目前很少有网站使用它们。我自己,在我的浏览器中屏蔽所有flash内容(在常规浏览会话中)-并且从不使用依赖flash的网站。
你的里程碑可以是……,所以您可以尝试这种方法-只是记住-您可能会失去一些用户。还要记住,一些SWF文件是可反编译的。,)
验证码(好的验证码,比如reCaptcha)帮助很大,但是你的用户会讨厌你…-想象一下,当你的用户需要在所有显示音乐艺术家信息的页面上解决一些验证码时,他们会多么喜欢你。
可能不需要继续了——你已经了解了。
现在你应该做的是:
记住:几乎不可能隐藏你的数据,如果你在另一边想要发布它们(以友好的方式)给你的普通用户。
So,
make your data easily accessible - by some API this allows the easy data access e.g. offload your server from scraping - good for you setup the right usage rights (e.g. for example must cite the source) remember, many data isn't copyright-able - and hard to protect them add some fake data (as you already done) and use legal tools as others already said, send an "cease and desist letter" other legal actions (sue and like) probably is too costly and hard to win (especially against non US sites)
在尝试使用一些技术障碍之前要三思。
与其试图阻止数据挖掘者,不如在你的网站可用性上投入更多精力。你的用户会喜欢你的。投入在技术障碍上的时间(和精力)通常是不值得的——花时间做一个更好的网站更好。
此外,数据窃贼与普通小偷不同。
如果你买了一个便宜的家庭警报器,并加上一个警告“这所房子与警方有联系”——许多小偷甚至不会试图闯入。因为他只要走错一步,就会进监狱。
所以,你投资的钱不多,但小偷投资的风险很大。
但数据窃贼没有这样的风险。恰恰相反——如果你走错了一步(例如,如果你因为技术障碍引入了一些BUG),你就会失去你的用户。如果抓取机器人第一次不工作,什么也不会发生——数据挖掘者只是尝试另一种方法和/或调试脚本。
在这种情况下,你需要更多的投资,而刮板投资得更少。
想想你想把时间和精力投入到什么地方……
Ps:英语不是我的母语——所以请原谅我的蹩脚英语…
如果你想看一个很好的例子,请访问http://www.bkstr.com/。他们使用j/s算法来设置cookie,然后重新加载页面,以便它可以使用cookie来验证请求是否正在浏览器中运行。一个为抓取而构建的桌面应用程序绝对可以做到这一点,但它会阻止大多数cURL类型的抓取。