8

我用 PHP 为一个网站构建了一个非常基本的广告管理器。

我说基本是因为它不像 Google 或 Facebook 广告甚至大多数高端广告服务器那样复杂。不处理付款或任何事情,甚至不针对用户。

它为我的低流量网站服务,但只是简单地显示一个随机横幅广告,计算印象浏览次数和点击次数。

特征:

  • 广告位/页面位置
  • 横幅图片
  • 姓名
  • 查看/印象计数器
  • 点击计数器
  • 开始和结束日期,或永无止境
  • 禁用/启用广告

不过,我想逐渐为系统添加更多功能。

我注意到的一件事是展示次数/浏览次数计数器经常看起来膨胀。

我相信造成这种情况的原因是社交网络的蜘蛛和机器人以及搜索引擎蜘蛛。

例如,如果有人将我网站页面的 URL 输入 Facebook、Google+、Twitter、LinkedIn、Pinterest 和其他网络,这些网站通常会爬取我的网站以收集网页标题、图像和描述。

当实际的人没有查看页面时,我真的希望能够禁用此功能,使其不计为广告展示次数/浏览次数。

我意识到这将很难检测到所有这些,但如果有办法获得其中的大多数,至少它会使我的统计数据更加准确。

因此,我正在寻求有关如何实现目标的任何帮助或想法?请不要说要使用其他广告系统,那是不可能的,谢谢

在此处输入图像描述

4

4 回答 4

13

您需要使用 JavaScript 提供广告。这是避免大多数爬虫的唯一方法。只有浏览器加载依赖项,如图像、JS 和 CSS。99% 的机器人会避开它们。

你也可以这样做:

// basic crawler detection and block script (no legit browser should match this)
if(!empty($_SERVER['HTTP_USER_AGENT']) and preg_match('~(bot|crawl)~i', $_SERVER['HTTP_USER_AGENT'])){
    // this is a crawler and you should not show ads here
}

通过这种方式,您将获得更好的统计数据。使用 JS 做广告。

PS您也可以尝试在 JS 中设置一个 cookie,然后再检查它。爬虫可能会收到通过 HTTP 以 PHP 发送的 cookie,但在 JS 中设置的那些,99.9% 的机会他们会错过它。因为他们需要加载一个 JS 文件并解释它。这只能由浏览器完成。

于 2013-07-07T19:24:40.823 回答
0

你可以这样做:这里有一个很好的文本格式的爬虫列表:http ://www.robotstxt.org/db/all.txt

假设您已将该文件中的所有用户代理收集到一个名为的数组中$botList

$ua = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : NULL;

if($ua && in_array($ua, $botList)) {
  // this is probably a bot
}

当然,用户代理很容易被更改或有时可能会丢失,但像谷歌和雅虎这样的搜索引擎对自己是诚实的。

于 2013-07-07T19:22:47.580 回答
0

爬虫会下载 robots.txt,即使它不尊重它并且出于好奇而这样做。这是一个很好的迹象,你可能正在处理一个,尽管它不是确定的。

如果爬虫在很短的时间内访问了大量的链接,您就可以检测到他。不过,这在代码中可能非常复杂。

但这只有在您不想或无法运行 Javascript 时才可行。否则,请使用 CodeAngry 的答案。


编辑:响应@keune 的回答,您可以保留所有访问者 IP 并在 cron 作业中通过列表运行它们,然后发布更新的访问者计数。

于 2013-07-07T19:52:44.840 回答
0

试试这个:

if (preg_match("/^(Mozilla|Opera|PSP|Bunjalloo|wii)/i", $_SERVER['HTTP_USER_AGENT']) && !preg_match("/bot|crawl|crawler|slurp|spider|link|checker|script|robot|discovery|preview/i", $_SERVER['HTTP_USER_AGENT'])) {
    It's not a bot
} else {
    It's a bot
}
于 2016-04-29T09:47:41.813 回答