【问题标题】:How to provide text string to scraper not visible to visitors [closed]如何向访问者不可见的刮板提供文本字符串[关闭]
【发布时间】:2019-02-10 22:24:47
【问题描述】:

向网络爬虫提供访问者看不到的消息(文本字符串)的最佳方式是什么?

用例:我的网站正在被抓取,这很好,但我想向抓取工具提供一些对我的访问者不可见的额外数据。如何有效地做到这一点?

我可以在<span> 标记之间包装一段文本,并在页面加载时使用 JavaScript 为访问者隐藏它,但抓取工具可能会运行 JavaScript 并在删除字符串后抓取副本。如何避免这种情况?

【问题讨论】:

  • "什么是最好的方法" 你必须知道这个问题是非常基于意见的。也许添加一些“最佳”(最有效,最安全)的上下文以避免您的问题被关闭。
  • 答案取决于什么样的“刮板”

标签: javascript web-scraping


【解决方案1】:

您是否考虑过使用<meta> 标签?它不会向您的用户显示(不需要 javascript),并且可能是大多数网络爬虫开始寻找元数据的地方。

例如<meta name="description" content="This page is about foo bar and baz">

【讨论】:

  • 不幸的是,爬虫忽略了元标记。他们“剪切和粘贴”身体的一部分。
  • 也许 schema.org 可以成为您的替代方案?
  • 我不明白,刮板会刮掉我页面的正文...我想在该正文中添加一条消息,对访问者不可见。
【解决方案2】:

我认为您几乎无法保证会收到此消息。在编写抓取脚本之前,创建者通常会在普通浏览器中分析站点结构,因此会隐藏此消息。然后在不可见的无头模式下只会刮掉文档的一部分,因此人类将无法看到该消息,程序也不会以任何显着的概率保存它。即使所有 HTML 都将被转义并保存以供将来处理,该处理也很可能会自动完成并且仅针对某些关键元素。因此,您可以做到这一点的唯一可靠方法是完全阻止抓取,并在脚本创建者调试脚本失败时收到一些消息。但即使在这种情况下,也很难将第一次尝试与其他允许的尝试区分开来,所以这样一来,您就可以完全阻止抓取。

您可以尝试在浏览器控制台中记录一些值得注意的消息,希望脚本创建者在准备阶段,在分析 DOM 结构并在控制台中运行一些测试代码时能够看到它。看看 Facebook 或 https://ponyfoo.com/ 是如何做到的:

【讨论】:

  • 这个想法是将一条消息注入到被抓取的部分,可能是文档的文本正文。
  • 如何确定要报废的零件以及使用什么工具?如果我没记错的话,没有可靠的方法来区分普通客户端和爬虫,只有一些近似的启发式方法会变得越来越复杂。
  • 因为我了解抓取工具,并且我知道它们会抓取和重新发布内容的哪些部分。
  • 那么也许值得将此信息添加到问题中:预期使用什么抓取工具以及如何在服务器或客户端检测到它。
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 2014-12-31
相关资源
最近更新 更多