如何检测社交媒体巨头Bots并优化php中的useragent?

时间:2019-02-19 19:21:08

标签: php regex preg-match bots

我正在尝试构建可捕获用户USER-AGENT的脚本。可以轻松地使用 $ _ SERVER ['HTTP_USER_AGENT']

示例:以下是通过 $ _ SERVER ['HTTP_USER_AGENT']

检测到的所有Twitter Bot。

我只是简单地在twitter上发布php脚本的链接,并检测到机器人: here

以下是Twitter网络的 HTTP_USER_AGENT 捕获的机器人。

1

Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.2) Gecko/20090729 Firefox/52.0

2

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)

3

Mozilla/5.0 (compatible; AhrefsBot/6.1; News; +http://ahrefs.com/robot/)

4

Mozilla/5.0 (compatible; TrendsmapResolver/0.1)

5(不确定其漫游器还是普通代理)

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

6

Twitterbot/1.0

7

 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1; +http://www.apple.com/go/applebot)

现在,我想从检测到的 HTTP_USER_AGENT

中重新定义/过滤机器人名称

示例:

rv:1.9.1.2
Trident/4.0
(compatible; AhrefsBot/6.1; News; +http://ahrefs.com/robot/)
(compatible; TrendsmapResolver/0.1)
Twitterbot/1.0
(Applebot/0.1; +http://www.apple.com/go/applebot)

到目前为止,我已经尝试过:

if (
    strpos($_SERVER["HTTP_USER_AGENT"], "Twitterbot/1.0") !== false ||          
    strpos($_SERVER["HTTP_USER_AGENT"], "Applebot/0.1") !== false
) {
    $file =fopen("crawl.txt","a");
    fwrite($file,"TW-bot detected.\n");
    echo "TW-bot detected.";
}
else {
     $file =fopen("crawl.txt","a");
    fwrite($file,"Nothing found.\n");
    echo "Nothing";
}

但是上述代码无法正常工作。让我知道我出了什么问题,并且在 crawl.txt 中始终显示未找到 让我知道检测机器人的正确/更好/最好的方法或任何方向或指导。

1 个答案:

答案 0 :(得分:0)

您可能会发现,很容易发现捕获简单网站预览的漫游器,但是抓取受限内容的漫游器的用户代理要困难得多。

除了解析UA之外,您还需要做更多的事情。询问REMOTE_ADDR也将是必要的。您将通过类似http://ip-api.com的方式触发每个请求,以确定该请求是否来自数据中心。小心使用代理的用户,它们会触发误报。您可以进一步研究使用Javascript的浏览器功能,但是请注意,这是一个棘手的问题,它是提供商检测工具和(通常)黑帽广告商之间不断的竞争。