【问题标题】:How to block crawlers such as spyder/Nutch-2 from visiting a specific page?如何阻止spyder/Nutch-2等爬虫访问特定页面?
【发布时间】:2014-04-15 13:07:11
【问题描述】:

我有一个 Windows 客户端应用程序,它使用托管在共享商业网络服务器中的 php 页面。

在这个 php 页面中,我返回了一个加密的 json。同样在这个页面中,我有一段代码来跟踪哪些 IP 正在访问这个 php 页面,我注意到有一个 spyder/Nutch-2 爬虫在访问这个页面。

我在想,爬虫怎么可能找到未在任何搜索引擎中发布的页面。我有办法阻止爬虫访问此特定页面吗?

要我用.htaccess文件来配置吗?

【问题讨论】:

  • 只是禁止IP。可以在 apache 中完成,但首选 iptables 或防火墙
  • @user574632 — 您如何使用 iptables 禁止蜘蛛访问该特定 URL(这需要检查 HTTP 请求)?
  • 我以为他的意思是完全禁止它
  • 您可以在 .htaccess 文件中阻止爬虫 ip 或基于名称的定义。但是,爬虫代理名称或 IP 地址可以不时更改。请参阅我的答案以获取更多详细信息

标签: php apache .htaccess web-crawler nutch


【解决方案1】:

您可以通过执行以下操作来禁止特定的爬虫;

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (spyder/Nutch-2) [NC]
#For multi block
#RewriteCond %{HTTP_USER_AGENT} (spyder/Nutch-2|baidu|google|...) [NC]
RewriteRule .* - [R=403,L]

那个爬虫,可以更改代理名称,所以这可能不是解决方案。您需要通过查看需要的 ip 地址来阻止该爬虫;

Order Deny,Allow
Deny from x.x.x.x

但是,该机器人也可以更改其 IP 地址。这意味着,您需要跟踪您的访问日志。并决定要阻止哪些代理并手动将其添加到列表中

【讨论】:

    【解决方案2】:

    您确实可以使用.htaccessrobots.txt 是另一种选择,但一些爬虫会忽略这一点。 您还可以阻止特定的用户代理字符串。 (它们因爬虫而异)

    robots.txt:

    User-agent: *
    Disallow: /
    

    这个例子告诉所有机器人远离网站: 您可以阻止特定目录

    Disallow: /demo/
    

    More information about robots.txt

    【讨论】:

    • 爬虫不能忽略 .htaccess 文件,我想你是在考虑 robots.txt 文件。
    • 是的,确实是我的错,我指的是 robots.txt 文件。
    【解决方案3】:

    您可以使用 .htaccess 文件禁止特定 IP 地址:

    Order Deny,Allow
    Deny from xxx.xx.xx.xx
    

    其中xxx代表IP地址

    【讨论】:

    • 是的,但是可以更改蜘蛛的名称和 ip。这种情况下的解决方案是什么?
    【解决方案4】:

    关闭。最好使用robots.txt 文件。链接的页面介绍了为什么要设置一个以及如何设置。总结:

    1. 它避免了蜘蛛和机器人在页面上运行脚本时浪费服务器资源。
    2. 可以节省带宽。
    3. 它消除了 webstats 中的混乱情况。
    4. 您可以对其进行微调以仅排除某些机器人。

    我应该提一个警告。一些蜘蛛被编码为忽略 robots.txt 文件,甚至会检查它以查看您不希望它们访问的内容。但是,来自合法来源的蜘蛛会遵守 robots.txt 指令。

    【讨论】:

    • robots.txt 不是解决方案。此文件不会以编程方式阻止特定的爬虫。即使您在 robots.txt 文件中定义了机器人名称,也取决于特定的爬虫来抓取您的网站
    【解决方案5】:

    您可以使用 .htaccess 或另一种选择是使用 php 代码。在 php 代码的顶部简单地放置如下内容:

    if(strpos($_SERVER['HTTP_USER_AGENT'],'spyder/Nutch-2') !== false) {
        die();
    }
    //rest of code here
    

    【讨论】:

    • 但是,静态内容仍然可以被爬虫抓取。因为,apache默认直接服务于静态竞争。您还需要使用 php 提供静态内容,以使您的 php 代码检测到 cralwer。
    • OP 只是在谈论阻止返回 json 数组的单个 php 页面,而不是整个站点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多