网站如何检测机器人?

时间:2017-12-23 22:28:26

标签: python web-scraping web bots

我正在学习python,我正在抓reddit。不知怎的,reddit已经发现我是一个机器人(我的软件实际上是这个),但是他们怎么知道呢?我们如何欺骗他们认为我们是普通用户。

我找到了实用的解决方案,但我要求更深入的理论理解。

1 个答案:

答案 0 :(得分:9)

互联网服务提供商使用大量技术来检测和打击机器人和刮刀。所有这些的核心是建立启发式和统计模型,以识别非人类行为。事情如:

  • 每个特定时间段来自特定IP的请求总数,例如,每秒超过50个请求,或每分钟500个,或每天5000个,可能看起来可疑甚至是恶意的。计算每单位时间每IP的请求数是一种非常常见且可以说是有效的技术。

  • 传入请求速率的规律性,例如,每秒10个请求的持续流量可能看起来像机器人编程来发出请求,稍等一下,发出下一个请求,等等。

  • HTTP标头。浏览器为每个请求发送可预测的User-Agent标头,以帮助服务器识别其供应商,版本和其他信息。结合其他标头,服务器可能能够发现请求来自未知或其他利用来源。

  • 身份验证令牌,Cookie,加密密钥以及其他需要以特殊方式形成和提交后续请求的短暂信息的有状态组合。例如,服务器可以发送某个密钥(通过cookie,标题,在响应主体中等)并期望您的浏览器包含或以其他方式使用该密钥来进行它对服务器的后续请求。如果太多的请求无法满足这个条件,那么它们可能来自机器人就是一个明显的迹象。

  • 鼠标和键盘跟踪技术:如果服务器知道某个API只能在用户单击某个按钮时调用,则可以编写前端代码以确保检测到正确的鼠标活动(即,在API请求发出之前,用户确实单击了按钮。

还有很多技术。想象一下,你是试图检测和阻止机器人活动的人。您将采取哪些方法来确保请求来自人类用户?您如何定义人类行为而不是机器人行为,以及您可以使用哪些指标来辨别这两者?

还存在一个实用性问题:某些方法成本更高,难以实施。那么问题将是:您需要检测和阻止机器人活动的程度(如何可靠)?你是在打击机器人试图入侵用户帐户吗?或者你只是需要阻止它们(可能以最好的方式)从其他公开可见的网页中抓取一些数据?在假阴性和假阳性检测的情况下你会做什么?这些问题告诉您可能采取的识别和阻止机器人活动的方法的复杂性和独创性。