如何判断一个请求来自搜索引擎的爬虫

如何判断一个请求来自搜索引擎的爬虫

  • 正确清楚下每个请求都有 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
});

你可能感兴趣的:(如何判断一个请求来自搜索引擎的爬虫)