我正在尝试构建可捕获用户USER-AGENT的脚本。可以轻松地使用 $ _ SERVER ['HTTP_USER_AGENT']
示例:以下是通过 $ _ SERVER ['HTTP_USER_AGENT']
检测到的所有Twitter Bot。我只是简单地在twitter上发布php脚本的链接,并检测到机器人:
以下是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 中始终显示未找到 让我知道检测机器人的正确/更好/最好的方法或任何方向或指导。
答案 0 :(得分:0)
您可能会发现,很容易发现捕获简单网站预览的漫游器,但是抓取受限内容的漫游器的用户代理要困难得多。
除了解析UA之外,您还需要做更多的事情。询问REMOTE_ADDR也将是必要的。您将通过类似http://ip-api.com的方式触发每个请求,以确定该请求是否来自数据中心。小心使用代理的用户,它们会触发误报。您可以进一步研究使用Javascript的浏览器功能,但是请注意,这是一个棘手的问题,它是提供商检测工具和(通常)黑帽广告商之间不断的竞争。