[英]How Incapsula works and how to beat it
Incapsula 是一个 web 应用交付平台,可用于防刮。
我在 Python 和 Scrapy 工作,我发现了这个,但它似乎已经过时并且不适用于当前的 Incapsula。 我用我的目标网站测试了 Scrapy 中间件,由于中间件无法提取一些混淆参数,我得到了 IndexErrors。
是否有可能调整这个 repo 或者 Incapsula 现在改变了它的操作模式?
我也很好奇如何将请求从 chrome 开发工具“复制为 cURL”到我的目标页面,并且 chrome 响应包含用户内容,但 curl 响应是一个“封装事件”页面。 这适用于最初清除 cookies 的 chrome .....
curl 'https://www.radarcupon.es/tienda/fotoprix.com'
-H 'pragma: no-cache' -H 'dnt: 1' -H 'accept-encoding: gzip, deflate, br'
-H 'accept-language: en-GB,en-US;q=0.9,en;q=0.8'
-H 'upgrade-insecure-requests: 1'
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/62.0.3202.94 Chrome/62.0.3202.94 Safari/537.36'
-H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
-H 'cache-control: no-cache' -H 'authority: www.radarcupon.es'
--compressed
我期待双方的第一个请求返回类似 javascript 挑战的内容,这将设置一个 cookie,但现在它似乎不太像那样工作?
很难给出具体的答案,因为 Incapsula 有一个非常详细的规则引擎,可以用来阻止或挑战请求。 Cookie 检测和 Javascript 支持是用于识别可疑流量的两个最常见的数据点; 源自客户端 IP 地址的用户代理字符串、标头和行为(每分钟请求数、AJAX 请求等)也可能导致 Incapsula 挑战流量。 如果 DDoS 保护功能没有根据站点看到的流量进行合理配置,则会主动阻止请求。
可能有多种原因。 很难准确指出 Incapsula 应用哪些规则组合来将您检测为机器人。 它可以使用 IP 速率限制、浏览器指纹识别、标头验证、TCP/IP 指纹识别、用户代理等...
但是你可以试试
轮换IP。
您可以在互联网上轻松找到免费代理列表,并且可以使用像scrapy-rotating-proxies
中间件这样的解决方案在您的蜘蛛中配置多个代理,并让请求自动通过它们轮换。
轮换 USER_AGENT。
导航此过滤器的一种方法是将您的 USER_AGENT 切换为从流行的 Web 浏览器使用的值复制的值。 在极少数情况下,您可能需要来自特定 Web 浏览器的用户代理字符串。 有多个 Scrapy 插件可以通过流行的 Web 浏览器用户代理字符串轮换您的请求,例如scrapy-random-useragent
或Scrapy- UserAgents
。
您可以尝试检查开发人员工具并对请求参数进行逆向工程。
大多数情况下,目标是通过牢记最佳实践来避免被禁止。 你可以在这里阅读它们。 或者您也可以尝试使用专用工具,例如智能代理管理器或智能浏览器。 我是一名开发者倡导者@Zyte。
Incapsula 与许多其他反爬虫服务一样,使用 3 种类型的详细信息来识别 web 爬虫:
为了绕过这种保护,我们需要确保这些细节与普通 web 用户的细节相匹配。
一个自然的 web 用户通常从住宅或移动 IP 地址连接,其中许多生产爬虫部署在数据中心 IP 地址(谷歌云、AWS 等)上。 这 3 种类型差别很大,可以通过分析 IP 数据库来确定。 顾名思义:datacenter - 商用 IP 地址,住宅 - 家庭地址,mobile 是基于基站的移动网络(3G、4G 等)
因此,我们希望通过住宅或移动代理池分发我们的爬虫网络。
使用 javascript,这些服务可以分析浏览器环境并构建指纹。 如果我们正在运行浏览器自动化工具(如 Selenium、Playwright 或 Puppeteer)作为 web 刮板,我们需要确保浏览器环境看起来像用户一样。
这是一个巨大的主题,但一个好的开始是看看哪个puppeteer-stealth插件将补丁应用于浏览器环境以隐藏各种细节,这些细节揭示了浏览器受脚本控制的事实。
注意: puppeteer-stealth
是不完整的,你需要做额外的工作才能可靠地通过 Incapsula。
所以答案有点简短,但我在我的博客How to Avoid Web Scraping Blocking 上写了关于这个主题的广泛介绍:Javascript
最后,我们的刮板连接方式也起着巨大的作用。 连接模式可用于确定客户端是真实用户还是机器人。 例如,真实用户通常以更混乱的模式浏览网站,例如转到主页、类别页面等。
隐秘的刮板应该在刮板连接模式中引入一些混乱。
当您询问使用 CURL 因为 Incapsula 依赖于 JS 指纹识别时,在这种情况下您不会有太多运气。 但是,有几件事情需要注意可能对其他系统有所帮助:
了解将机器人流量与真实人类流量区分开来的这 3 个细节可以帮助我们开发更隐蔽的抓取工具。 如果您想了解更多如何在不被阻止的情况下进行刮擦,我在我的博客上写了更多关于这个主题的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.