在Node Express中检测社交机器人
Detect social bots in Node Express
我正在尝试检测以下两个选项中的任何一个:
- 特定的机器人列表(FacebookExternalHit|LinkedInBot|TwitterBot|Baiduspider)
- 任何不支持Crawable Ajax规范的机器人
我看到过类似的问题(如何识别Facebook用户代理),但在Node和Express中没有解释如何做到这一点。
我需要用这样的格式来做:
app.get("*", function(req, res){
if (is one of the bots) //serve snapshot
if (is not one of the bots) res.sendFile(__dirname + "/public/index.html");
});
您可以检查请求对象中的标头User-Agent
,并针对不同的机器人测试其值
截至目前,Facebook表示他们有三种类型的用户代理头值(请查看Facebook爬网程序),twitter也有一个版本的用户代理(请查看twitter URL爬网和缓存),下面的例子应该涵盖这两个机器人。
节点
var http = require('http');
var server = http.createServer(function(req, res){
var userAgent = req.headers['user-agent'];
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot') {
/* Do something for the bot */
}
});
server.listen(8080);
快递
var http = require('http');
var express = require('express');
var app = express();
app.get('/', function(req, res){
var userAgent = req.headers['user-agent'];
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot') {
/* Do something for the bot */
}
});
app.listen(8080);
您可以使用request.headers
对象来检查传入请求是否包含特定于该机器人的任何UA信息。
节点
var http = require('http');
var server = http.createServer(function(req, res){
if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */
});
server.listen(8080);
快递
var http = require('http');
var express = require('express');
var app = express();
app.get('/', function(req, res){
if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */
});
app.listen(8080);
此node-express中间件将分析一组不同的用户代理字符串,并为您提供一种"bot==true"或"desktop==true"的确定方法。我还没有使用过它,自述文件听起来只是一个试验项目,所以我不知道它将如何维护,但它会检测到各种机器人。
https://github.com/rguerreiro/express-device
相关文章:
- 如何检测是否有溢出
- 如何检测用于WebGL的专用或集成显卡
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 如何使用密码检测网络中的状态连接
- 使用JavaScript检测Flash
- 在不阻止默认行为的情况下检测IE10中的缩放
- 检测个位数整数时正在转换毫秒
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 动态插入的表:JQuery未检测到最后一行
- 检测页面上某个元素中选择(突出显示)或单击的内容
- jQuery检测浏览器是否支持Zoom
- 检测iframe是否跨域的愚蠢方法
- 检测图像分辨率
- 如何检测第三方广告服务器请求
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 当没有文本输入聚焦时检测空格键按下
- 在Node Express中检测社交机器人
- 具有可抓取内容的 JS 应用(检测搜索机器人服务器端)
- 如何检测机器人垃圾邮件形式和日志ip &输入