如何识别网络爬虫?

2021/01/30 12:41 · php ·  · 0评论

如何过滤来自网络抓取工具等的点击。不是人类的点击。

我使用maxmind.com从IP请求城市。.如果我必须支付所有点击数(包括网络抓取工具,机器人等)的话,这并不便宜。

有两种检测机器人的一般方法,我将它们称为“礼貌/被动”和“激进”。基本上,您必须使您的网站出现心理障碍。

有礼貌

这些是礼貌地告诉抓取工具他们不应该抓取您的网站并限制抓取频率的方法。可以通过robots.txt文件确保礼貌,在该文件中,您可以指定应允许哪些bot爬网您的网站以及您可以多久爬网一次。假设您要处理的机器人礼貌。

好斗的

使机器人远离您的站点的另一种方法是变得主动。

用户代理

一些攻击性行为包括(如其他用户所提到的)用户代理字符串的过滤。这可能是检测它是否是用户的最简单但也是最不可靠的方法。许多机器人倾向于欺骗用户代理,而某些机器人是出于正当理由(即,他们只想抓取移动内容),而其他机器人则根本不希望被识别为机器人。更糟糕的是,某些漫游器会欺骗合法/礼貌的漫游器代理,例如google,microsoft,lycos和其他爬网程序的用户代理,这些代理通常被认为是礼貌的。依赖用户代理会有所帮助,但不能单靠本身。

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

机器人陷阱

我喜欢将其视为“维纳斯飞行陷阱”,它基本上可以惩罚任何想和您玩花样的机器人。

bot陷阱可能是查找不遵守robots.txt文件的bot的最有效方法,而又不会真正损害网站的可用性。创建漫游器陷阱可确保仅捕获漫游器,而不捕获真实用户。这样做的基本方法是在robots.txt文件中设置一个专门标记为禁止访问的目录,这样,任何礼貌的机械手都不会掉入陷阱。您要做的第二件事是从您的网站到bot陷阱目录放置一个“隐藏”链接(这可以确保真实用户永远不会进入那里,因为真实用户永远不会单击不可见链接)。最后,您禁止进入bot trap目录的任何IP地址。

以下是有关如何实现此目的的一些说明:
创建一个bot陷阱(或您的情况:PHP bot trap)。

注意:当然,某些漫游器足够聪明,可以读取robots.txt文件,查看已标记为“超出限制”的所有目录,并且仍会忽略您的礼貌设置(例如爬网率和允许的漫游器)。尽管这些机器人不礼貌,但它们可能不会落入您的机器人陷阱。

暴力

我认为这实际上对于一般观众(和一般用途)来说太激进了,因此,如果有18岁以下的孩子,请带他们到另一个房间!

You can make the bot trap "violent" by simply not specifying a robots.txt file. In this situation ANY BOT that crawls the hidden links will probably end up in the bot trap and you can ban all bots, period!

The reason this is not recommended is that you may actually want some bots to crawl your website (such as Google, Microsoft or other bots for site indexing). Allowing your website to be politely crawled by the bots from Google, Microsoft, Lycos, etc. will ensure that your site gets indexed and it shows up when people search for it on their favorite search engine.

Self Destructive

限制机器人可以在您的网站上进行爬网的另一种方法是服务于验证码或机器人无法解决的其他挑战。这是以牺牲您的用户为代价的,并且我认为任何使您的网站无法使用的东西(例如CAPTCHA)都是“自毁”的。当然,这实际上不会阻止bot反复尝试爬网您的网站,只会使您的网站对他们非常无趣。有很多方法可以“绕过”验证码,但是它们很难实现,因此我不会对此进行过多研究。

结论

为了您的目的,应对机器人的最佳方法可能是结合使用上述策略:

  1. 过滤用户代理。
  2. 设置一个僵尸陷阱(暴力陷阱)。

捕获进入暴力僵尸陷阱的所有僵尸,并仅将其IP列入黑名单(但不要阻止它们)。这样,您仍然可以获得被僵尸程序爬网的“好处”,但是由于进入了僵尸程序陷阱,您将不必付费检查列入黑名单的IP地址。

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

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']);

用户代理($_SERVER['HTTP_USER_AGENT'])通常标识连接代理是浏览器还是机器人。查看访问您网站的搜寻器用户代理的日志/分析。相应地过滤。

请注意,用户代理是客户端应用程序提供的标头。因此,它几乎可以是任何东西,并且不应100%受到信任。制定相应的计划。

检查User-Agent将保护您免受Google和Yahoo等合法机器人的攻击。

但是,如果您也遭到垃圾邮件机器人的攻击,则用户代理比较可能不会保护您,因为这些机器人通常会伪造一个通用的用户代理字符串。在这种情况下,您将需要采用更复杂的措施。如果需要用户输入,则可以使用简单的图像验证方案,例如ReCaptcha或phpMeow。

不幸的是,如果您希望过滤出某个机器人的所有网页匹配,那么如果该机器人伪造了其凭据,则没有100%可靠的方法来做到这一点。这只是网络管理员必须忍受的令人讨厌的事实。

我找到了这个程序包,它正在积极开发中,到目前为止我非常喜欢:

https://github.com/JayBizzle/Crawler-Detect

就这么简单:

use Jaybizzle\CrawlerDetect\CrawlerDetect;

$CrawlerDetect = new CrawlerDetect;

// Check the user agent of the current 'visitor'
if($CrawlerDetect->isCrawler()) {
    // true if crawler user agent detected
}

// Pass a user agent as a string
if($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) {
    // true if crawler user agent detected
}

// Output the name of the bot that matched (if any)
echo $CrawlerDetect->getMatches();

useragentstring.com提供了一种可用于分析用户字符串的方法:

$api_request="http://www.useragentstring.com/?uas=".urlencode($_SERVER['HTTP_USER_AGENT'])."&getJSON=all";
$ua=json_decode(file_get_contents($api_request));
if($ua["agent_type"]=="Crawler") die();
本文地址:http://php.askforanswer.com/ruheshibiewangluopachong.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!