通过 Google 文档阻止网站抓取

Block Website Scraping by Google Docs

我 运行 一个以 chart/tabular 格式提供各种数据供人们阅读的网站。最近我注意到来自 Google Docs 的网站请求有所增加。查看 IP 和用户代理,它似乎确实来自 Google 服务器 - example IP lookup here.

点击次数在每天 2,500 到 10,000 个请求之间。

我假设有人创建了一个或多个 Google 表格来从我的网站上抓取数据(可能使用 IMPORTHTML 功能或类似功能)。我宁愿这没有发生(因为我不知道数据是否被正确归因)。

是否有更好的方法来阻止 Google supports/approves 的流量?

我宁愿不基于 IP 地址进行阻止,因为阻止 Google 服务器感觉不对,可能会导致未来出现问题或 IP 可能会更改。目前我正在阻止(返回 403 状态)基于包含 GoogleDocsdocs.google.com.

的用户代理

目前流量主要来自 66.249.89.221 和 66.249.89.223,始终使用用户代理 Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; http://docs.google.com)

作为次要问题:有没有办法追踪文档或其帐户所有者?我可以访问他们正在访问的 URL,但没有什么可以继续的因为请求似乎通过 Google Docs 服务器进行代理(HTTP 日志中没有 Referer、Cookie 或其他此类数据)。

谢谢。

阻止 User-Agent 是一个很好的解决方案,因为似乎没有办法设置不同的 User-Agent 并仍然使用 INPUTHTML 函数——而且你很乐意禁止 'all' doc-sheets 的用法,太完美了。

额外的想法,虽然如果完全禁止似乎不愉快:

  1. 对其进行速率限制:正如您所说,您认识到它主要来自两个 IP,并且始终使用相同的用户代理,请放慢您的响应速度。只要请求是连续的,您就可以提供数据,但通过的次数可能足以阻止抓取。延迟 20 或 30 秒的响应(对可疑的抓取程序)。

  2. 重定向到 "You're blocked" 屏幕,或带有 "default" 数据的屏幕(即,可抓取,但不包含当前数据)。比基本的 403 更好,因为它会告诉人们它不是用于抓取的,然后您可以引导他们购买访问权限(或者至少向您请求密钥。)

您可以通过在第一次尝试时设置 cookie 来强制执行此问题,并且仅当存在 cookie 时才提供响应。这样,任何 "simple" 导入都不会起作用,因为在第一个请求中,cookie 不存在,因此第三方无法读取任何内容。