zoukankan      html  css  js  c++  java
  • 怎样准确推断请求是搜索引擎爬虫(蜘蛛)发出的请求?

    站点常常会被各种爬虫光顾,有的是搜索引擎爬虫,有的不是,通常情况下这些爬虫都有UserAgent,而我们知道UserAgent是能够伪装的,UserAgent的本质是Http请求头中的一个选项设置,通过编程的方式能够给请求设置随意的UserAgent。 

    所以通过UserAgent推断请求的发起者是否是搜索引擎爬虫(蜘蛛)的方式是不靠谱的,更靠谱的方法是通过请求者的ip相应的host主机名是否是搜索引擎自己家的host的方式来推断。

    要获得ip的host,在windows下能够通过nslookup命令,在linux下能够通过host命令来获得,比如:

    这里我在windows下运行了nslookup ip 的命令,从上图能够看到这个ip的主机名是crawl-66-249-64-119.googlebot.com。 这说明这个ip是一个google爬虫,google爬虫的域名都是 xxx.googlebot.com.

    我们也能够通过python程序的方式来获得ip的host信息,代码例如以下:

    import socket
    def getHost(ip):
        try:
            result=socket.gethostbyaddr(ip)
            if result: return result[0], None
        except socket.herror,e:
            return None, e.message

    上述代码使用了socket模块的gethostbyaddr的方法获得ip地址的主机名。

    经常使用蜘蛛的域名都和搜索引擎官网的域名相关,比如:

    • 百度的蜘蛛一般是baidu.com或者baidu.jp的子域名
    • google爬虫一般是googlebot.com的子域名
    • 微软bing搜索引擎爬虫是search.msn.com的子域名
    • 搜狗蜘蛛是crawl.sogou.com的子域名

    基于以上原理,我写了一个工具页面提供推断ip是否是真实搜索引擎的工具页面,该页面上提供了网页推断的工具和常见的google和bing的搜索引擎爬虫的ip地址。

    页面地址:http://outofmemory.cn/tools/is-search-engine-spider-ip/ 

    本文提供的代码是python代码,通过JAVA代码也是能够实现的,原理是一样的。

  • 相关阅读:
    linux下ls出现文件的后缀有@,* ,/之类的解释
    对shell中cat 和EOF的理解
    linux中test的意义 又可以表示为[]
    Python程序中的进程操作-进程同步(multiprocess.Lock)
    Python程序中的进程操作-开启多进程
    进程的创建和结束
    同步异步阻塞非阻塞
    进程的并行和并发
    进程的调度
    进程基础
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4296860.html
Copyright © 2011-2022 走看看