我认为关注如何“不可能”阻止坚定且精通技术的用户抓取网站被赋予了太多的意义。@Drew Noakes 指出,该网站包含的信息在汇总时具有一定的“价值”。如果一个网站具有不受约束的匿名用户可以轻松访问的聚合数据,那么是的,防止抓取可能几乎是“不可能的”。
我建议要解决的问题不是如何防止用户抓取聚合数据,而是可以使用哪些方法将聚合数据从公共访问中删除;从而消除了刮板的目标而不需要做'不可能',防止报废。
汇总数据应视为专有公司信息。一般而言,专有公司信息不会以汇总或原始形式向匿名用户公开。我认为防止获取有价值数据的解决方案是限制和约束对数据的访问,而不是防止在将数据呈现给用户时将其废弃。
1] 用户帐户/访问权限——任何人都不应该在给定时间段内访问所有数据(特定于数据/域)。用户应该能够访问与他们相关的数据,但显然从问题来看,没有用户有合法目的来查询所有聚合数据。在不了解该站点的具体情况的情况下,我怀疑合法用户在某个时间段内可能只需要一小部分数据。明显超过典型用户需求的请求应该被阻止或限制,以使抓取非常耗时并且被抓取的数据可能过时。
2] 运营团队经常监控指标以确保大型分布式和复杂系统是健康的。不幸的是,要确定偶发性和间歇性问题的原因变得非常困难,而且通常甚至难以确定存在与正常操作波动相反的问题。运营团队经常处理从许多指标中获取的统计分析历史数据,并将它们与当前值进行比较,以帮助识别系统运行状况的重大偏差,例如系统运行时间、负载、CPU 利用率等。
同样,用户对数据量远远大于标准的请求可以帮助识别可能正在废弃数据的个人;这种方法甚至可以自动化,甚至可以进一步扩展,以跨多个账户查看表明报废的模式。用户 1 抓取 10%,用户 2 抓取接下来的 10%,用户 3 抓取接下来的 10%,等等......这样的模式(和其他模式)可以提供强有力的指示,表明单个个人或团体利用多个帐户
3] 不要让最终用户直接访问原始聚合数据。细节在这里很重要,但简单地说,数据应该驻留在后端服务器上,并使用一些特定于域的 API 进行检索。同样,我假设您不仅提供原始数据,而且还响应用户对某些数据子集的请求。例如,如果您拥有的数据是特定地区的详细人口统计数据,那么合法的最终用户只会对该数据的一部分感兴趣。例如,最终用户可能想知道与父母双方居住在多单元住房中的有青少年的家庭的地址或特定城市或县的数据。这样的请求将需要处理聚合数据以生成最终用户感兴趣的结果数据集。从输入查询的众多潜在排列中提取每个结果数据集并重建其整体的聚合数据将非常困难。考虑到请求/时间的数量、结果数据集的总数据大小和其他潜在标记,抓取工具也会受到网站安全性的限制。一个结合了特定领域知识的开发良好的 API 对于确保 API 足够全面以服务于其目的但又不会过于笼统以致返回大量原始数据转储至关重要。结果数据集的总数据大小和其他潜在标记。一个结合了特定领域知识的开发良好的 API 对于确保 API 足够全面以服务于其目的但又不会过于笼统以致返回大量原始数据转储至关重要。结果数据集的总数据大小和其他潜在标记。一个结合了特定领域知识的开发良好的 API 对于确保 API 足够全面以服务于其目的但又不会过于笼统以致返回大量原始数据转储至关重要。
将用户帐户并入站点,为用户建立使用基线,识别和限制显着偏离典型使用模式的用户(或其他缓解方法),以及创建用于请求处理/消化结果的界面集合(与原始聚合数据相比)会给意图窃取您数据的恶意个人带来极大的复杂性。阻止网站数据的报废可能是不可能的,但“不可能”的前提是汇总数据易于被爬虫访问。你不能刮掉你看不到的东西。因此,除非您的聚合数据是未经处理的原始文本(例如图书馆电子书),否则最终用户不应访问原始聚合数据。即使在图书馆电子书的例子中,