如何确定真正的用户正在浏览我的网站或只是在爬网或在 PHP 中

Posted

技术标签:

【中文标题】如何确定真正的用户正在浏览我的网站或只是在爬网或在 PHP 中【英文标题】:How to determine real user are browsing my site or just crawling or else in PHP 【发布时间】:2011-10-01 02:43:00 【问题描述】:

我想知道用户是否真的在查看我的网站(我知道它只是由浏览器加载并显示给人类,而不是真正的人类查看它)。

我知道两种方法都行。

    javascript

    如果页面是由浏览器加载的,它会自动运行js代码,除非浏览器禁止。然后使用 AJAX 回调服务器。

    html中的1×1透明图片。

    使用 img 回调服务器。

有谁知道这些方法的陷阱或更好的方法吗?

另外,我不知道如何确定 0×0 或 1×1 iframe 以防止上述方法。

【问题讨论】:

你到底想达到什么目的? @Gedrox 我想过滤机器人。 那没有回答问题。您担心机器人会在您的网站上做什么?您是否害怕搜索索引机器人或试图隐藏身份的机器人? 【参考方案1】:

我同意其他人的观点,这真的很难 - 通常好的爬虫会将自己标识为爬虫,因此使用 User-Agent 是过滤掉这些人的好方法。用户代理字符串的一个很好的来源可以在http://www.useragentstring.com 找到。我过去使用过 Chris Schulds php 脚本 (http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/) 效果很好。

您还可以使用 Apache 配置或 .htaccess 文件在服务器级别过滤这些家伙,但我发现跟上它是一场失败的战斗。

但是,如果您查看您的服务器日志,您会看到大量使用有效(浏览器)用户代理或时髦用户代理的可疑活动,因此这只能到目前为止。你可以玩黑名单/白名单IP游戏,但那会很快变老。

许多爬虫加载图片(即 Google 图片搜索),所以我认为这不会一直有效。

很少有爬虫会有 Javascript 引擎,所以这可能是区分它们的好方法。让我们面对现实吧,如今有多少用户真正转向了 Javascript?我已经看到了相关的统计数据,但我认为这些统计数据受到了无法识别自己的爬虫/机器人的绝对数量的影响。但是,需要注意的是,我已经看到 Google bot 确实现在运行 Javascript。

因此,归根结底,这很艰难。我肯定会采用混合策略——如果你使用用户代理、图像、IP 和 javascript 进行过滤,我相信你会得到大多数机器人,但尽管如此,但希望有些机器人能够通过。

另一个想法,您总是可以使用已知的 Javascript 浏览器怪癖来测试报告的用户代理(如果它是浏览器)是否真的是那个浏览器?

【讨论】:

【参考方案2】:

检查 http 请求的 User-Agent 标头。 爬虫应该将此设置为除已知浏览器之外的任何内容。

这里是 google-bot 标头 http://code.google.com/intl/nl-NL/web/controlcrawlindex/docs/crawlers.html

在 php 中,您可以通过以下方式获取用户代理:

$Uagent=$_SERVER['HTTP_USER_AGENT'];

然后您只需将其与已知标头进行比较 作为提示 preg_match() 可以很方便地在几行代码中完成所有这些操作。

【讨论】:

【参考方案3】:

您可以创建一个谷歌网站管理员帐户 它告诉你如何为机器人配置你的网站 还显示机器人将如何阅读您的网站

【讨论】:

【参考方案4】:

像 google 或 yahoo 这样的“好”机器人通常会尊重 robots.txt 文件。按用户代理过滤也可能有帮助。

但最终 - 如果有人想要获得自动访问权限,则很难阻止它;你应该确信这是值得的。

【讨论】:

【参考方案5】:

我想知道用户是否真的在查看我的网站(我知道它只是由浏览器加载并显示给人类,而不是真正的人类查看它)。

图像方式似乎更好,因为普通用户也可能会关闭 Javascript。机器人通常不加载图像,所以这确实可以工作。尽管如此,如果您只是想过滤一组已知的机器人(例如 Google 和 Yahoo),您可以简单地检查 HTTP 用户代理标头,因为这些机器人实际上会将自己识别为机器人。

【讨论】:

我想说如果你想过滤 Googlebot,你应该使用robots.txt 我想过滤掉所有的机器人,而不仅仅是搜索引擎。恶意机器人会设置一个用户代理来伪装自己。所以这是不信任。【参考方案6】:

    机器人可以访问浏览器,例如http://browsershots.org

    机器人可以请求该 1x1 图像。

简而言之,没有真实的方法可以分辨。最好的办法是使用 CAPTCHA,但它会降低人类的体验。

只需在需要的地方使用验证码(用户注册等)。

【讨论】:

@hakre:我听说过。

以上是关于如何确定真正的用户正在浏览我的网站或只是在爬网或在 PHP 中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript 或 Web 表单的 Web 爬网站点

在Nutch中每个站点爬一定深度

sharepoint 某site无法进行搜索内容,其他site都可以搜索

Geb 如何自动填充用户名/密码提示

网络爬虫在爬取网页时,响应头没有编码信息...如何解决保存在本地的乱码问题?

我可以在我的 webapp 中禁用浏览器刷新吗?