【问题标题】:Blocking Web Scrapers [duplicate]阻止 Web Scrapers [重复]
【发布时间】:2011-03-25 15:44:42
【问题描述】:

网站可以通过哪些方式阻止网络爬虫?您如何确定您的服务器是否正在被机器人访问?

【问题讨论】:

  • 这是一道编程题吗?
  • 我认为这会影响您编写网站的方式
  • 添加这是一个现有的网站还是一个新的开发项目可能会有所帮助。无论您使用的是 RoR、.NET 技术,还是尚未做出该决定,而您只是在寻找高层次的想法(这甚至可能有助于指导决定使用哪种技术)
  • 这是初步的,所以我只是想获得一些关于阻止网络爬虫的复杂和基本方法的高级想法。
  • HTTP访问就是HTTP访问。如果我编写一个下载您的网页的程序与我告诉 Firefox 做同样的事情有什么区别?没有本质上的区别。

标签: screen-scraping web-crawler scraper


【解决方案1】:
  • 验证码
  • 不到一秒就提交了表单
  • 隐藏(通过 css)字段获取表单提交期间提交的值
  • 页面访问频率

简单的机器人无法从 Flash、图像或声音中删除文本。

【讨论】:

  • 所有这些选项(有效)也可能阻止合法的爬虫,如谷歌严重影响你的网页排名,加上验证码会妨碍普通用户。也没有回答如何识别您的网站被机器人访问的问题。
【解决方案2】:

很遗憾,您的问题类似于人们询问您如何阻止垃圾邮件。没有固定的答案,它不会阻止持续存在的某人/机器人。

但是,这里有一些可以实现的方法:

  1. 检查用户代理(虽然这可能是欺骗的)
  2. 使用 robots.txt(适当的机器人会 - 希望尊重这一点)
  3. 检测访问大量页面的 IP 地址过于一致(每“x”秒)。
  4. 手动,或在您的系统中创建标志以检查谁都在您的网站上,并阻止抓取工具采取的某些路线。
  5. 不要在您的网站上使用标准模板,并创建通用 css 类 - 并且不要在您的代码中放入 HTML cmets。

【讨论】:

  • 代码中没有使用html cmets是什么原因?
  • 即使您稍微更改了代码的布局,也很容易将模板分成多个部分以供抓取工具使用。
【解决方案3】:

您可以使用 robots.txt 阻止注意到它的机器人(但仍允许通过其他已知实例,例如 google 等) - 但这不会阻止那些忽略它的机器人。您可能能够从您的网络服务器日志中获取用户代理,或者您可以更新您的代码以将其记录在某处。如果您想要阻止特定用户代理访问您的网站,只需返回空白/默认屏幕和/或特定服务器代码。

【讨论】:

    【解决方案4】:

    我认为没有一种方法可以完全满足您的需求,因为在网站爬虫/抓取工具中,您可以在请求页面时编辑所有标题,例如 User-Agent,您将无法确定是否有来自 Mozilla Firefox 的用户或只是一个爬虫/爬虫...

    【讨论】:

      【解决方案5】:

      抓取工具在某种程度上依赖于从页面加载到页面加载的标记一致性。如果您想让他们的生活变得困难,请想出一种方法来根据请求提供更改的标记。

      【讨论】:

        【解决方案6】:

        “不良行为”之类的内容可能会有所帮助:http://www.bad-behavior.ioerror.us/

        来自他们的网站:

        Bad Behavior 旨在集成到您的基于 PHP 的网站中,尽早运行以在垃圾邮件机器人有机会利用其垃圾破坏您的网站甚至抓取您的网页之前将其丢弃要填写的电子邮件地址和表格。

        Bad Behavior 不仅可以阻止对您网站的实际破坏,还可以阻止许多电子邮件地址收集器,从而减少电子邮件垃圾邮件,以及许多自动网站破解工具,有助于提高您网站的安全性。

        【讨论】:

        • 不知道为什么这被否决了。不良行为确实阻止了各种各样的网络爬虫。我应该知道,我写的。
        猜你喜欢
        • 1970-01-01
        • 2021-07-14
        • 2020-04-03
        • 2019-09-26
        • 2016-10-22
        • 2012-08-25
        • 2011-06-20
        • 2017-07-05
        • 1970-01-01
        相关资源
        最近更新 更多