提供API有助于阻止屏幕抓取吗?

时间:2009-01-10 17:16:08

标签: json language-agnostic api screen-scraping

我最近在这里一直在思考有关屏幕抓取的问题,以及它可以完成的任务。所以我提出了以下问题。

作为网站开发人员,您是否会公开简单的API以防止用户屏幕抓取,例如JSON结果?

然后,这些结果可以实现缓存,并且它们的流量要小于可能下载的大量标记。

我不是在考虑预防,而是在遏制刮擦。


刮刮带宽样本
((用户*(%/ 100))*((freq * 60)* 24))* filesize

  • 用户:200,000
  • 使用实用程序的用户的百分比:5
  • filesize:1kb
  • 频率:1分钟

公式:

((users *(%/ 100))*((freq * 60)* 24))* filesize

10,000 * 1440 * 1

14400000kb或13.73291015625gb

假设您的JSON结果是200字节,现在是(10,000 * 1440 * 0.2)或2.74658203125gb一天。

这是每天约11gb流量的变化。


My Stack Overflow配置文件为96k以供参考。


此问题的原因促使用户档案要求获得JSON结果:
http://stackoverflow.uservoice.com/pages/general/suggestions/101342-add-json-for-user-information

我想知道其他开发人员是否会公开这种类型的API,以及是否值得花时间提供这些API以减少带宽。

6 个答案:

答案 0 :(得分:6)

提供API绝对应该减少针对您网站的屏幕抓取量。使用优秀的REST API比屏幕抓取更容易,更安全。屏幕可以更改,恕不另行通知,这使得屏幕抓取代码更难维护。作为开发人员,如果我需要来自网站的信息,如果通过API提供相同的信息,我绝不会抓取该网站。

答案 1 :(得分:1)

屏幕抓取不是现实可预防的。提供API虽然对那些使用数据的人很好,却无法阻止它。由于数据最终必须是人类可读的,因此它是机器可读的。您最好不要在您的网站上花费精力,而不是为那些使用您的数据(合法与否)的人工作。

wget,perl,正则表达式是抓取数据的常用机制。

答案 2 :(得分:1)

如果您想鼓励人们与您的网站集成,或者它很受欢迎,因为这是一个问题(因此您不得不让人们与其集成),那么请务必提供API。如果您的API足够且易于使用,那么人们会更喜欢它来屏幕抓取。如果您的API不适合或比屏幕刮板更难使用,那么您可能仍然遇到问题。

答案 3 :(得分:1)

如果技术用户使用API​​比使用屏幕更容易,那么他们就会这样做。更好的是,如果您鼓励人们使用您的API而不是屏幕抓取,您应该更容易监控流量,因为自动用户代理与浏览器用户明显不同 - 剂。

RESTful JSON接口是一个不错的选择,因为它可以很容易地从任何其他语言编写脚本(向我展示一种没有JSON解析器的语言,我将向您展示一种无人关心的语言的)。

答案 4 :(得分:0)

如果您想提供一个开放模型,人们可以在您的网站上开发解决方案,那么您应该提供API。屏幕抓取是一种恶意整合的方法,只应在最后使用。

答案 5 :(得分:0)

大多数开发人员会根据自己的原因选择使用该技术。因此,如果您提供的API比用于刮擦屏幕的API更容易,那么一些未知的百分比将转移到它。在他们的考虑清单中,带宽减少可能会非常低。

由于您尚未指定要删除的内容,因此我们无法帮您猜出要提供哪种API,或者使用它的比例是多少。

一种非常常见的难以转移的工具是使用Excel或其他一些使刮擦无痛的产品。

如果你的目的只是为了尽量减少痛苦(可能会从你的问题中推断出来),那么到目前为止最有用的事情就是查询他们的刮刀 - 无论如何都比查询SO更有用。

您可以查看woot.com并查看他们在RSS源上提供的内容,以取消对Web http服务器的负担。