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

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


当前回答

将你的内容放在验证码后面意味着机器人将很难访问你的内容。然而,人类会不方便,所以这可能是不可取的。

其他回答

我假定您已经设置了robots.txt。

正如其他人所提到的,刮刮器可以伪造其活动的几乎每个方面,并且可能很难识别来自坏人的请求。

我会考虑:

建立一个页面/jail.html。 禁止访问robots.txt中的页面(因此尊敬的蜘蛛永远不会访问)。 在你的一个页面上放置一个链接,用CSS隐藏它(display: none)。 记录访问者的IP地址到/jail.html。

这可以帮助您快速识别来自scraper的请求,这些请求公然无视您的robots.txt。

你可能还想让你的/jail.html成为一个完整的网站,它拥有与正常页面相同的标记,但是使用假数据(/jail/album/63ajdka, /jail/track/3aads8等)。这样,在你有机会完全阻止它们之前,糟糕的抓取程序不会被提醒“异常输入”。

快速解决这个问题的方法是设置一个陷阱。

Make a page that if it's opened a certain amount of times or even opened at all, will collect certain information like the IP and whatnot (you can also consider irregularities or patterns but this page shouldn't have to be opened at all). Make a link to this in your page that is hidden with CSS display:none; or left:-9999px; positon:absolute; try to place it in places that are less unlikely to be ignored like where your content falls under and not your footer as sometimes bots can choose to forget about certain parts of a page. In your robots.txt file set a whole bunch of disallow rules to pages you don't want friendly bots (LOL, like they have happy faces!) to gather information on and set this page as one of them. Now, If a friendly bot comes through it should ignore that page. Right but that still isn't good enough. Make a couple more of these pages or somehow re-route a page to accept differnt names. and then place more disallow rules to these trap pages in your robots.txt file alongside pages you want ignored. Collect the IP of these bots or anyone that enters into these pages, don't ban them but make a function to display noodled text in your content like random numbers, copyright notices, specific text strings, display scary pictures, basically anything to hinder your good content. You can also set links that point to a page which will take forever to load ie. in php you can use the sleep() function. This will fight the crawler back if it has some sort of detection to bypass pages that take way too long to load as some well written bots are set to process X amount of links at a time. If you have made specific text strings/sentences why not go to your favorite search engine and search for them, it might show you where your content is ending up.

无论如何,如果你从战术和创造性的角度思考,这可能是一个很好的起点。最好的办法就是学习机器人是如何工作的。

我还会考虑打乱一些ID或页面元素上的属性显示方式:

<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle"> 

每次都会改变它的形式,因为一些机器人可能会在你的页面或目标元素中寻找特定的模式。

<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass"> 

id="p-12802" > id="p-00392"

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

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

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

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

迟到的回答——而且这个答案可能不是你想听到的……

我自己已经编写了许多(几十个)不同的专门的数据挖掘抓取程序。(只是因为我喜欢“开放数据”哲学)。

在其他答案中已经有很多建议了-现在我将扮演魔鬼倡导者的角色,并将扩展和/或纠正它们的有效性。

第一:

如果有人真的想要你的数据 你不能有效地(技术上)隐藏你的数据 数据是否应该对“常规用户”公开访问

试图使用一些技术障碍是不值得的麻烦,导致:

对你的老用户来说,就是让他们的用户体验变差 到常规的和受欢迎的机器人(搜索引擎) 等等……

纯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:英语不是我的母语——所以请原谅我的蹩脚英语…

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

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

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

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