7

最近我在这里一直在思考屏幕抓取以及它可能是一项什么样的任务。所以我提出以下问题。

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

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

我不是在看预防,而是在阻止刮擦。


抓取带宽样本
((users * (% / 100)) * ((freq * 60) * 24)) * 文件大小

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

公式:

((用户 * (% / 100)) * ((freq * 60) * 24)) * 文件大小

10,000 * 1440 * 1

14400000kb 或 13.73291015625gb

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

这相当于每天大约 11GB 的流量变化。


我的 Stack Overflow 配置文件是 96k 以供参考。


这个问题的原因提示要求从用户配置文件中获取 JSON 结果:
http ://stackoverflow.uservoice.com/pages/general/suggestions/101342-add-json-for-user-information

我想了解其他开发人员是否会公开此类 API,以及是否值得您花时间提供这些 API 以减少带宽。

4

6 回答 6

6

提供 API 肯定会减少对您的网站进行的屏幕抓取量。使用良好的 REST API 比屏幕抓取更容易、更安全。屏幕可以在没有通知的情况下更改,这使得屏幕抓取代码更难维护。作为一名开发人员,如果我需要来自某个站点的信息,如果可以通过 API 获得相同的信息,我将永远不会抓取该站点。

于 2009-01-10T17:28:59.283 回答
1

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

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

于 2009-01-10T17:21:24.447 回答
1

如果您想鼓励人们与您的网站集成,或者它足够流行以至于成为一个问题(因此您被迫允许人们与之集成),那么一定要提供一个 API。如果您的 API 足够且易于使用,那么人们会更喜欢它而不是屏幕抓取。如果您的 API 比屏幕抓取工具不充分或更难使用,那么您可能仍然会遇到问题。

于 2009-01-10T17:30:30.450 回答
1

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

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

于 2009-01-10T17:37:19.720 回答
0

如果您想提供一个开放模型,人们可以在您的站点上开发解决方案,那么是的,您应该提供一个 API。屏幕抓取是一种恶意集成的方法,只能在不得已的情况下使用。

于 2009-01-10T17:20:44.900 回答
0

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

由于您尚未指定要抓取的内容,因此我们无法帮助您猜测要提供哪种 API,或者将使用它的比例。

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

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

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

于 2009-01-10T17:53:26.833 回答