如何防止网站刮刮?\[关闭\]

HTML

番长阿飞

2020-03-24

我有一个大型音乐网站,拥有大型艺术家数据库。我一直注意到其他音乐网站正在抓取我们网站的数据(我在这里和那里输入虚拟的艺术家名称,然后用google搜索它们)。

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

第3513篇《如何防止网站刮刮?\[关闭\]》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

20个回答
Sam斯丁 2020.03.24

生成HTML,CSS和JavaScript。写生成器比解析器容易,因此您可以不同地生成每个服务页面。然后,您将无法再使用缓存或静态内容。

LGil 2020.03.24

屏幕抓取器通过处理HTML来工作。而且,如果他们决心要获取您的数据,那么从技术上讲您将无能为力,因为人眼无法处理任何事情。从法律上讲,您可能会有所求助,这就是我的建议。

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

  • 为每个艺术家/专辑等生成Flash文件。
  • 为每个艺术家内容生成图像。也许只需一张艺术家姓名的图像等就足够了。通过将文本呈现到服务器上的JPEG / PNG文件中并链接到该图像来执行此操作。

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

LGil 2020.03.24

如果您想查看一个很好的例子,请访问http://www.bkstr.com/他们使用j / s算法设置cookie,然后重新加载页面,以便页面可以使用cookie验证请求是否正在浏览器中运行。可以通过抓取构建的桌面应用肯定可以通过这种方式获得,但是它将停止大多数cURL类型的抓取。

Sam猴子 2020.03.24

将您的内容放在验证码后面意味着机器人会发现很难访问您的内容。但是,人类会感到不便,因此可能是不希望的。

伽罗理查德 2020.03.24

我同意上面的大多数帖子,并且我想补充一点,您的网站对搜索引擎的友好程度越高,它的可抓取性就越大。您可以尝试做一些非常棘手的事情,这些事情会使抓取工具变得更困难,但这也可能会影响您的搜索能力...当然,这取决于您希望网站在搜索引擎上的排名。

JinJin 2020.03.24

多数人已经说过了,但是您是否考虑过CloudFlare保护?我的意思是:

图片说明

其他公司也可能这样做,CloudFlare是我所知道的唯一一家。

我很确定这会使他们的工作复杂化。当我由于速率限制而尝试删除受CloudFlare保护的站点的数据时,我也被IP自动禁止了4个月(我使用了简单的AJAX请求循环)。

L路易 2020.03.24

快速的解决方法是设置一个诱杀/机器人陷阱。

  1. 制作一个页面,如果该页面打开了一定的时间甚至根本没有打开,它会收集某些信息,例如IP和其他信息(您也可以考虑不规则或模式,但根本不必打开此页面)。

  2. 在您的页面中为此链接创建一个链接,该链接已被CSS display:none;隐藏;或左:-9999px;正值:绝对值;尝试将其放置在不太可能被忽略的位置,例如您的内容所属的位置,而不是页脚,因为有时漫游器可以选择忽略页面的某些部分。

  3. 在您的robots.txt文件中,为您不希望友好的漫游器(喜欢它们的笑脸!)的页面设置一大堆禁止规则,以收集信息并将其设置为其中之一。

  4. 现在,如果出现友好的漫游器,它将忽略该页面。是的,但这还不够好。在这些页面中添加更多,或以某种方式重新路由页面以接受不同的名称。然后在robots.txt文件中的这些陷阱页面以及您要忽略的页面旁边放置更多禁止规则。

  5. 收集这些漫游器或进入这些页面的任何人的IP,不要禁止它们,而是可以在您的内容中显示乱码,例如随机数,版权声明,特定的文本字符串,显示可怕的图片,基本上可以阻止您的行为好内容。您也可以设置指向页面的链接,该链接将永远需要加载。在php中,您可以使用sleep()函数。如果爬虫具有某种检测功能,可以绕过那些加载时间太长的页面,因为某些写得很好的漫游器被设置为一次处理X数量的链接,这将对爬虫进行反击。

  6. 如果您输入了特定的文本字符串/句子,为什么不转到自己喜欢的搜索引擎并进行搜索,它可能会向您显示内容的最终位置。

无论如何,如果您在战术和创造性上进行思考,这可能是一个很好的起点。最好的办法是学习机器人的工作方式。

我还考虑过欺骗某些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"
Tom凯 2020.03.24

您无法停止正常的屏幕抓取。不论好坏,这都是网络的本质。

可以做到,除非有人以注册用户身份登录,否则任何人都不能访问某些东西(包括音乐文件)。在Apache中做起来并不难我认为在IIS中也不会太困难。

西里老丝古一 2020.03.24

不幸的是,最好的选择是相当手动的:查找您认为表明已被抓取的流量模式,并禁止其IP地址。

由于您是在谈论公共站点,因此使站点搜索引擎更友好也将使站点易于抓取。如果搜索引擎可以抓取并抓取您的网站,那么恶意抓取工具也可以。这是一条细线。

前端村村 2020.03.24
  1. 不,无法停止(以任何方式)
  2. 接受它。为什么不以RDFa的身份发布并变得对超级搜索引擎友好,并鼓励重复使用数据?人们会感谢您并在适当的时候提供信誉(请参见musicbrainz为例)。

这不是您可能想要的答案,但是为什么隐藏您要公开的内容?

斯丁 2020.03.24

与其将机器人列入黑名单,不如将其列入白名单。如果您不想终止搜索引擎的搜索结果,可以将其用户代理字符串列入白名单,这些字符串通常广为宣传。较不道德的机器人倾向于伪造流行的Web浏览器的用户代理字符串。排名靠前的几个搜索引擎应该会吸引超过95%的点击量。

使用其他发布者建议的技术,识别机器人本身应该非常简单。

Harry西门 2020.03.24

当然可以。为了获得100%的成功,请使您的网站离线。

实际上,您可以做一些使刮刮变得困难的事情。Google会进行浏览器检查,以确保您不是抓取搜索结果的机器人(尽管像大多数其他东西一样,这可能是伪造的)。

您可以执行以下操作,从首次连接到站点到随后的点击之间都需要几秒钟的时间。我不确定理想时间是什么时间或确切的时间如何做,但这是另一个想法。

我敢肯定还有其他一些人,他们有更多的经验,但是我希望这些想法至少有所帮助。

Tony凯 2020.03.24

可能对初学者刮板不利的事情:

  • IP封锁
  • 使用大量的ajax
  • 检查引荐请求标头
  • 需要登录

总的来说会有所帮助的事情:

  • 每周更改您的布局
  • robots.txt

有帮助但会使您的用户讨厌您的事情:

  • 验证码
Stafan路易 2020.03.24

我做了很多Web爬 网,并根据发现的烦恼总结了一些技术来阻止博客上的Web爬网。

这是您的用户和刮板之间的折衷方案。如果您限制IP,使用CAPTCHA,要求登录等,那么对于刮板而言,您将感到非常困难。但这也可能会驱走您的真实用户。

卡卡西Near 2020.03.24

从技术角度来看:只要对您一次查询太多的Google行为建模即可。那应该停止很多。

从法律角度来看:听起来您正在发布的数据不是专有数据。意味着您正在发布名称和统计信息以及其他无法获得版权的信息。

在这种情况下,抓取程序不会通过重新分配有关艺术家姓名等的信息来侵犯版权。但是,当它们将您的网站加载到内存中时,它们可能会侵犯版权,因为您的网站包含可版权保护的元素(例如布局等)。

我建议阅读有关Facebook v。Power.com的文章,并了解Facebook用于阻止屏幕抓取的参数。您可以采取多种合法方法来阻止他人抓取您的网站。他们可能具有深远的影响力和想象力。有时法院会接受这些论点。有时他们没有。

但是,假设您要发布不具有版权的公共领域信息,例如名称和基本统计​​信息,那么……您应该以言论自由和开放数据的名义让它公开。那就是网络的全部意义。

村村 2020.03.24

好的,正如所有帖子所述,如果您想使其对搜索引擎友好,那么机器人肯定可以抓取。

但是您仍然可以做一些事情,它可能会对60-70%的抓取机器人产生影响。

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

如果特定IP地址的访问速度非常快,则在几次访问(5-10)之后,将其IP地址+浏览器信息放入文件或数据库中。

下一步

(这将是一个后台进程,并且始终运行或在几分钟后安排好时间。)制作另一个脚本,该脚本将继续检查那些可疑IP地址。

情况1。如果用户代理是Google,BingYahoo这样的已知搜索引擎(您可以通过谷歌搜索找到有关用户代理的更多信息)。然后,您必须看到http://www.iplists.com/此列表并尝试匹配模式。如果它看起来像是伪造的用户代理,则在下次访问时要求填写验证码(您需要对机器人IP地址进行更多研究。我知道这是可以实现的,还可以尝试IP地址的Whois。这可能会有所帮助。)

情况2:搜索机器人没有用户代理:只需在下次访问时填写验证码即可。

TomProSam 2020.03.24

我想你已经成立了robots.txt

正如其他人提到的那样,抓取工具可以伪造其活动的几乎所有方面,并且很难识别来自坏人的请求。

我会考虑:

  1. 设置页面/jail.html
  2. 禁止访问中的页面robots.txt(因此,尊敬的蜘蛛将永远不会访问)。
  3. 将链接放在您的页面之一上,并用CSS(display: none将其隐藏
  4. 记录访问者的IP地址/jail.html

这可能有助于您快速识别来自刮板的请求,而这些请求显然无视您的robots.txt

你可能也想使你的/jail.html整个整个网站具有相同的,准确的标记为正常的网页,而是用假数据(/jail/album/63ajdka/jail/track/3aads8等)。这样,只有当您有机会完全阻止它们时,不良的刮板才会收到“异常输入”的警报。

Pro神无 2020.03.24

实际上,您无法采取任何措施完全防止这种情况发生。抓取者可以伪造其用户代理,使用多个IP地址等,并以普通用户的身份出现。您唯一可以做的就是在页面加载时使文本不可用-使用图像,Flash或使用JavaScript进行加载。但是,前两个是个坏主意,如果您的某些常规用户未启用JavaScript,则最后一个将是可访问性问题。

如果他们绝对抨击您的网站并浏览所有页面,则可以进行某种速率限制。

虽然有一些希望。抓取工具依赖于您网站数据的格式一致。如果您可以以某种方式将其随机化,则可能会破坏其刮板。诸如在每次加载时更改页面元素的ID或类名之类的事情,等等。但这需要做很多工作,我不确定是否值得。即使那样,他们也可能会以足够的奉献精神绕过它。

泡芙 2020.03.24

抱歉,做到这一点真的很难...

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

如果是这样,并且他们没有拒绝,那么您可以采取进一步的行动,并给他们发送停止和停止的信

通常,您为防止抓取而采取的任何措施都可能最终带来负面影响,例如可访问性,漫游器/蜘蛛等。

Itachi 2020.03.24

提供XML API来访问您的数据;以易于使用的方式。如果人们想要您的数据,他们会得到的,您不妨全力以赴。

通过这种方式,您可以有效地提供功能的子集,从而至少确保抓取器不会占用HTTP请求和大量带宽。

然后,您要做的就是说服希望您的数据使用API​​的人员。;)

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android