如何判断一个请求来自搜索引擎的爬虫
- 正确清楚下每个请求都有 UserAgent ,但是UserAgent 是可以伪装
- 判断请求 ip对应的host主机名是否是搜索引擎
通过UserAgent 判断
需要匹配的关键字是:
Baiduspider
Googlebot
360Spider
Sosospider
sogou spider
百度:http://www.baidu.com/search/spider.htm
google:https://support.google.com/webmasters/answer/1061943
360:http://www.so.com/help/help_3_2.html
soso:http://help.soso.com/webspider.htm
sogou:http://www.sogou.com/docs/help/webmasters.htm#07
通过 ip 解析的出来的主机名称
在linux平台下,您可以使用host ip命令反解ip来判断是否来自Baiduspider的抓取。Baiduspider的hostname以 *.baidu.com 或 *.baidu.jp 的格式命名,非 *.baidu.com 或 *.baidu.jp 即为冒充。
$ host 123.125.66.120
120.66.125.123.in-addr.arpa domain name pointer
baiduspider-123-125-66-120.crawl.baidu.com.
在windows平台或者IBM OS/2平台下,您可以使用nslookup ip命令反解ip来 判断是否来自Baiduspider的抓取。打开命令处理器 输入nslookup xxx.xxx.xxx.xxx(IP地 址)就能解析ip, 来判断是否来自Baiduspider的抓取,Baiduspider的hostname以 *.baidu.com 或 *.baidu.jp 的格式命名,非 *.baidu.com 或 *.baidu.jp 即为冒充。
在mac os平台下,您可以使用dig 命令反解ip来 判断是否来自Baiduspider的抓取。打开命令处理器 输入dig xxx.xxx.xxx.xxx(IP地 址)就能解析ip, 来判断是否来自Baiduspider的抓取,Baiduspider的hostname以 *.baidu.com 或 *.baidu.jp 的格式命名,非 *.baidu.com 或 *.baidu.jp 即为冒充。
nodejs 代码实现
const dns = require('dns');
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service);
// Prints: localhost ssh
});
网友评论