当前位置: 爱符号 - 所有分类 - Web开发 - ASP.NET - 让你的网站记录蜘蛛来访次数吧
让你的网站记录蜘蛛来访次数吧 RangNiDeWangZhanJiLuZhiZhuLaiFangCiShuBa
符号空间 发表于:2012-12-28 11:03:40 阅读(5169)
关键词:C# C# asp.net asp.net 蜘蛛 蜘蛛 爬虫 爬虫
摘要:你是否曾想过记录自己的网站,每天有哪些搜索引擎的蜘蛛来过? 蜘蛛统计:今日: 谷歌:142(7秒前) 百度:101(6分钟前) 搜搜:46(半小时前) 昨日: 百度:650(11小时前) 搜搜:59(12小时前) 谷歌:184(11小时前) 必应:4(半天前) 雅虎:4(半天前)

如果你是一个站长,如果你有自己的博客网站,如果你会编程,有没有想过,统计一下每天有哪些搜索引擎来访问过你的网站,方便知道收录的大概情况。

首先说明一点,搜索引擎会定期派出它们的机器人(蜘蛛),来访问你的网站,将你的网页收录在数据库中,如果被审核为有效内容,以后在搜索引擎上面搜索类似的关键词时,就能找到你的网站链接。

比如搜索:爱符号,就有可能看到首页 或者页面标题带此关键词的链接,或者是页面内容内容有此关键词的链接。


那么现在教你在asp.net中实现这样的功能。

网上其实也能找到一些类似的程序代码,可能会是php或asp的。


首先认识一下:global.asax

它是全局的一个文件,每次请求都会执行它里面的一些方法。

我们在这里要用到的就是:Application_BeginRequest,在请求执行之前。

注意:Application_BeginRequest 中不能用Session 和 Response,可以用 Request


废话少说,看代码:


        protected override void Application_BeginRequest(object sender, EventArgs e) {
              RecordSpider();//记录蜘蛛来访
        }
        private void RecordSpider(){
            string spiderName=GetSpiderName(Request.UserAgent);//得到蜘蛛的标识,
            if(!string.IsNullOrEmpty(spiderName)){//没名称的时候,就不是蜘蛛
                 //记录:今日:蜘蛛名称,时间,次数(加1)
                 //建议表结构:{ Id,Day,Name,Count,CreateDate} 
                 //Id:主键,自增
                 //Day:int,用于保存日期数字方便查询,例:20121228
                 //Name:varchar(64),蜘蛛名称,如果想更高效,可以用数字,
                 //Count:次数,今日内将持续叠加此值
                 //CreateDate:最后一次来访时间,即今日内,每来一次,此值将被更新为当前时间
                 //判断:今日此蜘蛛没有来过:插入一条记录,反之叠加Count并更新CreateDate
            }
        }
        /// <summary>
        /// 获取蜘蛛名称
        /// </summary>
        /// <param name="userAgent">user-agent header</param>
        /// <returns>返回已知蜘蛛名称</returns>
        public static string GetSpiderName(string userAgent) {
            if (string.IsNullOrEmpty(userAgent))
                return string.Empty;
            if (ContainsAny(userAgent, "Sosospider"))//其实很简单,蜘蛛总是会在HTTP头 User-Agent 中,留下一些特殊的标识(不排除有的网站故意这样做)
                return "SosoSpider";
            if (ContainsAny(userAgent, "Googlebot"))
                return "Googlebot";
            if (ContainsAny(userAgent, "Baiduspider"))
                return "BaiduSpider";
            return string.Empty;//暂时只写这些,实际代码有很多的,我这里只是贴一部分,雅虎 MSN BING 都是可以支持
        }
        //包含任意,用于在指定的文本中,包含其中一个文本就返回true
        private static bool ContainsAny(string text, params string[] values) {
            if (string.IsNullOrEmpty(text))
                return false;
            if (values == null || values.Length == 0)
                return false;
            bool result = false;
            foreach (var item in values) {
                if (text.IndexOf(item, StringComparison.OrdinalIgnoreCase) != -1) {
                    result = true;
                    break;
                }
            }

            return result;
        }


双击项目中的global.asax 进入代码窗口后,把上面的代码放进去,然后放到网站上,看看有没有蜘蛛来过。

代码中没有指明如何记录,请自行建立表,和后台页面显示。这些都是数据插入、更新、查询的事情。


看看本站的记录吧:


统计概况
蜘蛛统计
今日:
谷歌142(7秒前)  
    百度101(6分钟前)  
 搜搜46(半小时前)  

昨日:
百度650(11小时前)  
 搜搜59(12小时前)  
 谷歌184(11小时前)  
 必应4(半天前)  
   雅虎4(半天前)  

前日:
谷歌292(昨天23:37)  
搜搜63(昨天23:41)  
百度268(昨天23:55)  
雅虎3(昨天11:36)  
必应1(昨天16:08)  


声明:以上内容仅代表作者观点,不代表爱符号赞成此内容或立场