首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何识别网络爬虫?

如何识别网络爬虫?
EN

Stack Overflow用户
提问于 2011-12-07 02:20:35
回答 6查看 25.6K关注 0票数 33

我怎样才能过滤掉网络爬虫等非人类的点击。

我使用maxmind.com向IP请求城市。这并不是很便宜,如果我必须支付所有的点击,包括网络爬虫,机器人等。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-12-07 03:45:21

有两种检测机器人的一般方法,我称之为“礼貌/被动”和“攻击性”。基本上,你必须给你的网站一个心理障碍。

有礼貌

这些方法可以礼貌地告诉爬虫,他们不应该爬行你的网站,并限制你被爬行的频率。礼貌是通过robots.txt文件确保的,您可以在该文件中指定应允许哪些机器人(如果有的话)爬行您的网站以及您的网站可以爬行的频率。这假设你正在处理的机器人是有礼貌的。

攻击性

让机器人远离你网站的另一种方法是变得更具攻击性。

用户代理

一些攻击性行为包括(正如其他用户前面提到的)过滤用户代理字符串。这可能是最简单的,但也是检测它是否是用户的最不可靠的方法。许多机器人倾向于欺骗用户代理,其中一些是出于合法的原因(即他们只想抓取移动内容),而另一些则只是不想被识别为机器人。更糟糕的是,一些机器人欺骗合法/礼貌的机器人代理,例如谷歌、微软、lycos和其他通常被认为是礼貌的爬虫的用户代理。依赖用户代理可能会有所帮助,但不能单独使用。

有更积极的方法来处理欺骗用户代理和不遵守您的robots.txt文件的机器人:

僵尸程序陷阱

我喜欢把它想象成一个“维纳斯捕蝇陷阱”,它基本上惩罚了任何想要和你玩恶作剧的机器人。

机器人陷阱可能是最有效的方法来找到不符合你的robots.txt文件的机器人,而不会真正损害你网站的可用性。创建机器人陷阱可以确保只捕获机器人,而不捕获真正的用户。这样做的基本方法是设置一个目录,您在robots.txt文件中专门将其标记为禁用,这样任何有礼貌的机器人都不会落入陷阱。你要做的第二件事是放置一个从你的网站到bot陷阱目录的“隐藏”链接(这确保了真正的用户永远不会去那里,因为真正的用户永远不会点击看不见的链接)。最后,禁止任何进入bot陷阱目录的IP地址。

以下是关于如何实现这一点的一些说明:Create a bot trap (或者在您的例子中:一个PHP bot trap)。

注意:当然,一些机器人足够聪明,可以读取你的robots.txt文件,看到你标记为“禁止”的所有目录,并且仍然忽略你的礼貌设置(例如爬虫速率和允许的机器人)。这些机器人可能不会落入你的机器人陷阱,尽管它们是不礼貌的。

暴力

我认为这对普通观众(和普通用户)来说太有攻击性了,所以如果有18岁以下的孩子,请把他们带到另一个房间!

只需不指定robots.txt文件,就可以使机器人陷阱"violent“。在这种情况下,任何爬行隐藏链接的机器人都可能最终落入机器人陷阱,你可以禁止所有的机器人,句号!

不推荐这样做的原因是,你可能真的需要一些机器人来抓取你的网站(比如谷歌、微软或其他用于站点索引的机器人)。允许来自Google,Microsoft,Lycos等的机器人礼貌地抓取你的网站,这将确保你的网站被索引,当人们在他们最喜欢的搜索引擎上搜索它时,它就会显示出来。

自毁

还有另一种方法来限制机器人可以在你的网站上爬行,是服务于验证码或其他机器人无法解决的挑战。这是以牺牲你的用户为代价的,我认为任何让你的网站变得不那么有用的东西(比如验证码)都是“自毁”。当然,这实际上不会阻止机器人反复尝试爬取你的网站,它只会让他们对你的网站毫无兴趣。有一些方法可以“绕过”验证码,但它们很难实现,所以我不打算过多地探究这一点。

结论

出于您的目的,处理机器人的最好方法可能是使用上述策略的组合:

the

  • Filter user agents.

  • Setup a僵尸陷阱(
  1. )。

捕获所有进入暴力机器人陷阱的机器人,并简单地将其IP列入黑名单(但不要阻止它们)。通过这种方式,您仍然可以获得被机器人爬行的“好处”,但您不必为检查由于进入机器人陷阱而被列入黑名单的IP地址而付费。

票数 56
EN

Stack Overflow用户

发布于 2011-12-07 02:30:24

您可以查看USER_AGENT,如下所示:

代码语言:javascript
运行
复制
function crawlerDetect($USER_AGENT)
{
    $crawlers = array(
    array('Google', 'Google'),
    array('msnbot', 'MSN'),
    array('Rambler', 'Rambler'),
    array('Yahoo', 'Yahoo'),
    array('AbachoBOT', 'AbachoBOT'),
    array('accoona', 'Accoona'),
    array('AcoiRobot', 'AcoiRobot'),
    array('ASPSeek', 'ASPSeek'),
    array('CrocCrawler', 'CrocCrawler'),
    array('Dumbot', 'Dumbot'),
    array('FAST-WebCrawler', 'FAST-WebCrawler'),
    array('GeonaBot', 'GeonaBot'),
    array('Gigabot', 'Gigabot'),
    array('Lycos', 'Lycos spider'),
    array('MSRBOT', 'MSRBOT'),
    array('Scooter', 'Altavista robot'),
    array('AltaVista', 'Altavista robot'),
    array('IDBot', 'ID-Search Bot'),
    array('eStyle', 'eStyle Bot'),
    array('Scrubby', 'Scrubby robot')
    );

    foreach ($crawlers as $c)
    {
        if (stristr($USER_AGENT, $c[0]))
        {
            return($c[1]);
        }
    }

    return false;
}

// example

$crawler = crawlerDetect($_SERVER['HTTP_USER_AGENT']);
票数 9
EN

Stack Overflow用户

发布于 2011-12-07 02:26:51

用户代理($_SERVER['HTTP_USER_AGENT'])通常识别连接代理是浏览器还是机器人。查看访问您的站点的爬虫程序的用户代理的日志/分析。相应地进行过滤。

请注意,用户代理是由客户端应用程序提供的标头。因此,它几乎可以是任何东西,不应该百分之百地被信任。做好相应的规划。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8404775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档