我有一个相当大的音乐网站,有一个很大的艺术家数据库。我一直注意到其他音乐网站在窃取我们网站的数据(我在这里和那里输入假艺人的名字,然后进行谷歌搜索)。
如何防止屏幕刮擦?这可能吗?
我有一个相当大的音乐网站,有一个很大的艺术家数据库。我一直注意到其他音乐网站在窃取我们网站的数据(我在这里和那里输入假艺人的名字,然后进行谷歌搜索)。
如何防止屏幕刮擦?这可能吗?
当前回答
与其将机器人列入黑名单,不如将它们列入白名单。如果你不想让你的搜索结果失去前几个引擎,你可以把他们的用户代理字符串列入白名单,这通常是广为人知的。不那么道德的机器人倾向于伪造流行网络浏览器的用户代理字符串。排名靠前的几个搜索引擎应该会为你带来95%以上的流量。
识别机器人本身应该是相当简单的,使用其他帖子建议的技术。
其他回答
迟到的回答——而且这个答案可能不是你想听到的……
我自己已经编写了许多(几十个)不同的专门的数据挖掘抓取程序。(只是因为我喜欢“开放数据”哲学)。
在其他答案中已经有很多建议了-现在我将扮演魔鬼倡导者的角色,并将扩展和/或纠正它们的有效性。
第一:
如果有人真的想要你的数据 你不能有效地(技术上)隐藏你的数据 数据是否应该对“常规用户”公开访问
试图使用一些技术障碍是不值得的麻烦,导致:
对你的老用户来说,就是让他们的用户体验变差 到常规的和受欢迎的机器人(搜索引擎) 等等……
纯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:英语不是我的母语——所以请原谅我的蹩脚英语…
屏幕抓取器通过处理HTML来工作。如果他们决定要获取你的数据,从技术上讲你也无能为力,因为人的眼球可以处理任何东西。法律上已经指出,你可能有一些追索权,这是我的建议。
但是,您可以通过使用非基于html的表示逻辑来隐藏数据的关键部分
为每个艺术家/专辑等生成一个Flash文件。 为每个艺术家内容生成一个图像。也许只是一个艺术家名字的图像,等等就足够了。通过将文本呈现到服务器上的JPEG/PNG文件并链接到该图像来实现这一点。
请记住,这可能会影响你的搜索排名。
不幸的是,您最好的选择是手动的:寻找您认为指示抓取和禁止其IP地址的流量模式。
既然你谈论的是一个公共网站,那么让网站对搜索引擎友好也会让网站对抓取友好。如果一个搜索引擎可以抓取和刮除你的网站,那么恶意刮除者也可以。这是一条微妙的界线。
对不起,这真的很难做到……
我建议你礼貌地要求他们不要使用你的内容(如果你的内容是受版权保护的)。
如果是这样,他们不把它撤下来,那么你可以采取进一步的行动,给他们发一封停止通知信。
一般来说,无论你做什么来防止抓取可能最终会产生更负面的影响,例如可访问性,机器人/蜘蛛等。
可能对初学者不利的事情:
IP封锁 大量使用ajax 检查引用请求头 需要登录
通常会有帮助的事情:
每周改变你的布局 robots . txt
有帮助但会让你的用户讨厌你的东西:
验证码