我被刮伤了,我该如何预防?

I'm being scraped, how can I prevent this?

运行 IIS 7,我每周有几次看到来自一个地理位置的 Google 分析的大量点击。他们正在查看的 url 序列显然是由某种算法生成的,所以我知道我正在被抓取内容。有什么办法可以防止这种情况发生吗?很沮丧 Google 不只是给我一个 IP。

反爬虫的技术层出不穷。我只是将它们分类。如果您发现我的回答中缺少某些内容,请发表评论。

一个。基于网络请求的服务器端过滤

1。阻止可疑 IP。

阻止可疑 IP 的效果很好,但今天大部分抓取都是使用 IP 代理完成的,因此很长一段时间 运行 它不会有效。在您的情况下,您会收到来自同一 IP 地理位置的请求,因此如果您禁止此 IP,则爬虫肯定会利用 IP 代理,从而保持 IP 独立且不被发现。

2。使用 DNS 级别过滤

使用DNS防火墙属于防刮措施。简而言之,这是将您的 Web 服务设置为私有域名服务器 (DNS) 网络,该网络将在不良请求到达您的服务器之前对其进行过滤和阻止。某些公司提供这种复杂的措施来保护复杂的网站,您可能会更深入地了解 an example 此类服务。

3。有自定义脚本来跟踪用户的统计数据并删除麻烦的请求

正如您所提到的,您已经检测到一种抓取器抓取 URL 的算法。有一个跟踪请求 url 的自定义脚本,并基于此打开保护措施。为此,您必须在 IIS 中激活 [shell] 脚本。副作用可能是系统响应时间会增加,从而减慢您的服务。顺便说一下,您检测到的算法可能会发生变化,从而使该措施处于关闭状态。

4。限制请求频率

您可以设置请求频率或可下载数据量的限制。考虑到普通用户的可用性,必须应用这些限制。与 scraper 坚持请求相比,您可以将 Web 服务规则设置为丢弃或延迟不需要的 activity。然而,如果爬虫被重新配置以模仿常见的用户行为(通过一些当今知名的工具:Selenuim, Mechanize, iMacros),此措施将失败。

5。设置最大会话长度

这个措施是一个很好的措施,但现代的爬虫通常会执行会话身份验证,因此切断会话时间并不是那么有效。

乙。基于浏览器的识别和防范

1。为目标页面设置验证码

这是过去的技术,在很大程度上确实解决了抓取问题。但是,如果您的抓取对手利用了 anti-captcha services 中的任何一个,则此保护很可能会关闭。

2。将 JavaScript 逻辑注入 Web 服务响应

JavaScript 代码应该在请求的 html 内容之前或与请求的内容一起到达客户端(用户的浏览器或抓取服务器)。此代码的功能是向目标服务器计数并 return 某个值。基于此测试,html 代码可能格式不正确,甚至可能不会发送给请求者,从而使恶意抓取器无法使用。逻辑可能放在一个或多个 JavaScript 可加载文件中。这种 JavaScript 逻辑可能不仅适用于整个内容,也可能仅适用于网站内容的某些部分(例如价格)。为了绕过这个措施,爬虫可能需要转向甚至 more complex scraping logic(通常是 JavaScript),这是高度可定制的,因此成本很高。

C。基于内容的保护

1。将重要数据伪装成图像

这种内容保护方法如今被广泛使用。它确实可以防止爬虫收集数据。它的副作用是混淆为图像的数据被搜索引擎索引隐藏,从而降低网站的搜索引擎优化。如果爬虫利用 OCR 系统,这种保护可能再次被绕过。

2。频繁的页面结构变化

这是一种非常有效的防刮擦方法。它不仅可以更改元素 ids,还可以更改整个层次结构。后者涉及样式重组,因此会增加额外成本。当然,如果要保持内容抓取,抓取端必须适应新的结构。如果您的服务负担得起,则副作用不大。