抓取CSDN个人的用户访问量并且发邮件

随着CSDN访问量的不断增多,给自己的写,转,翻的动力也增加了很多。那么数字对我来说就很重要,那么怎么样去监测每天的CSDN的访问量这是我目前需要考虑的问题。突然想到之前通过网页抓取表标签的例子,刚好可以拉过来修改一下直接使用。

Step1:在CSDN中每个用户都有自己的主页的地址(http://blog.csdn.net/younghaiqing),通过主页地址可以直接访问看到左侧导航的用户访问量。将页面通过HttpWebResponse请求将数据存放在StreamReader中。

 string url = "http://blog.csdn.net/younghaiqing";
                //创建http链接
                var request = (HttpWebRequest)WebRequest.Create(url);
                //request.Timeout = 1000 * 10;    //5s过期
                var response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader sr = new StreamReader(stream);
                string content = sr.ReadToEnd();
                  HashSet<string> syncsInfo = new HashSet<string>();
                syncsInfo.Add(list);
                SendSyscsMail(syncsInfo);

Step2:放入StreamReader中的数据时HTML文件不能直接使用,数据也不是我需要的,那么通过查看元素得知。

这里写图片描述

<ul id="blog_rank">
    <li>访问:<span>7340次</span></li>
    <li>积分:<span>1029</span> </li>    
  .......
    <li>排名:<span>千里之外</span></li>
</ul>

step3:是唯一的,那么我可以使用正则表达式,先将< ul id=”blog_rank”>元素给取出来,在经过一次正则表达式将里面的标签全部替换掉。

        /// <summary> 
        /// 第一次正则
        /// </summary> 
        /// <param name="sHtmlText">HTML代码</param> 
        /// <returns></returns> 
  public static List<string> GetHtmlTextList(string sHtmlText)
        {
            // 定义正则表达式用来匹配 text 标签 
            Regex regText = new Regex(@"<ul\s+id\=\""blog_rank\"">([\S\s]*?)</ul>", RegexOptions.IgnoreCase);

            // 搜索匹配的字符串 
            MatchCollection matches = regText.Matches(sHtmlText);

            List<string> sUrlList = new List<string>();

            // 取得匹配项列表 
            foreach (Match match in matches)
            {
                sUrlList.Add(replceHtml(match.Value));
            }
            return sUrlList;
        }
        /// <summary>
        /// 第二次正则:将取出来的含有html的标签替换掉,只留下里面的值
        /// </summary>
        /// <param name="strHtml"></param>
        /// <returns></returns>
        public static string replceHtml(string strHtml)
        {
            Regex objRegExp = new Regex("<(.|\n)+?>");
            return objRegExp.Replace(strHtml, "");
        }

数据取好以后,那么我的数据保存在哪里?这是一很大的问题,还好公司有发邮件的功能,那么就让他每天定时给我发邮件。


        /// <summary>
        /// 发送邮件服务
        /// </summary>
        /// <param name="syncsFail"></param>
        private static bool SendSyscsMail(HashSet<string> syncsFail)
        {
            bool flag = false;
            if (syncsFail != null && syncsFail.Count > 0)
            {
                //遍历同步失败的数据,给IT管理人员发邮件通知
                StringBuilder sb = new StringBuilder()
                                .Append("<body style=\"margin: 10px; font-size: 12pt;\">")
                                .Append("    <div>您好:</div>")
                                .Append("    <div style=\"text-indent: 2em;\"YoungCSDN用户量访问同步</div>")
                                .Append("    <div style=\"margin-left: 2em;\">");

                foreach (string temp in syncsFail)
                {
                    sb.AppendFormat("{0}  <br/>", temp);
                }
                sb.Append(" </div>");
                try
                {
                    //发送提醒邮件
                    EMail email = new EMail(
                            "mossadmin@hitechsemi.com", //系统发送的
                            ConfigurationManager.AppSettings["MonitorPerson"],       //提醒邮件接收者
                            null,                       //抄送人收件箱地址
                            "CSDN用户量访问同步",     //邮件标题
                            sb.ToString(),              //邮件正文
                            null);                      //附件
                    email.Send();
                    flag = true;
                }
                catch (Exception)
                {

                    flag = false;
                }

            }
            return flag;
        }

EMail为一个邮件的新类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.IO;
using System.Net.Mime;
using System.Configuration;

namespace ConsoleApplication1
{
    public class EMail
    {
        private MailMessage mMailMessage;   //主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等)
        private SmtpClient mSmtpClient;     //主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等)
        private int mSenderPort = 25;       //发送邮件所用的端口号(htmp协议默认为25)
        private string mSenderServerHost = ConfigurationManager.AppSettings["eMailServer"];          //发件箱的邮件服务器地址(IP形式或字符串形式均可)
        private string mSenderUsername = ConfigurationManager.AppSettings["eMailSenderUsername"];    //发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)
        private string mSenderPassword = ConfigurationManager.AppSettings["eMailSenderPassword"];    //发件箱的密码 
        private bool mEnableSsl = false;                //是否对邮件内容进行socket层加密传输
        private bool mEnablePwdAuthentication = true;   //是否对发件人邮箱进行密码验证

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="fromMail">发件人</param>
        /// <param name="toMail">收件人,多个收件人之间用';'分隔</param>
        /// <param name="CCMail">抄送人,多个收件人之间用';'分隔</param>
        /// <param name="emailSubject">标题</param>
        /// <param name="emailBody">正文</param>
        /// <param name="emailAnnex">附件相对地址</param>
        public EMail(string fromMail, string toMail, string CCMail, string emailSubject, string emailBody, string emailAnnex)
        {
            try
            {
                mMailMessage = new MailMessage();

                string[] tempTo = toMail.Split(';');
                if (tempTo.Length > 0)
                {
                    for (int i = 0; i < tempTo.Length; i++)
                    {
                        if (!string.IsNullOrEmpty(tempTo[i]))
                        {
                            mMailMessage.To.Add(tempTo[i]);
                        }
                    }
                }

                if (!string.IsNullOrEmpty(CCMail))
                {
                    string[] tempCC = CCMail.Split(';');
                    if (tempCC.Length > 0)
                    {
                        for (int i = 0; i < tempCC.Length; i++)
                        {
                            if (!string.IsNullOrEmpty(tempCC[i]))
                            {
                                mMailMessage.CC.Add(tempCC[i]);
                            }
                        }
                    }
                }

                mMailMessage.From = new MailAddress(fromMail);
                mMailMessage.Subject = emailSubject;
                mMailMessage.Body = emailBody;
                mMailMessage.IsBodyHtml = true;
                mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
                mMailMessage.Priority = MailPriority.Normal;
                if (!string.IsNullOrEmpty(emailAnnex) && File.Exists(emailAnnex))
                {
                    //构造一个附件对象
                    Attachment attach = new Attachment(emailAnnex);
                    //得到文件的信息
                    ContentDisposition disposition = attach.ContentDisposition;
                    disposition.CreationDate = File.GetCreationTime(emailAnnex);
                    disposition.ModificationDate = File.GetLastWriteTime(emailAnnex);
                    disposition.ReadDate = File.GetLastAccessTime(emailAnnex);
                    //向邮件添加附件
                    mMailMessage.Attachments.Add(attach);
                }
            }
            catch (Exception e)
            {
                //Console.WriteLine(e.Message);
                throw e;
            }
        }
        /// <summary>        
        /// 邮件的发送       
        /// /// </summary>        
        public void Send()
        {
            try
            {
                if (mMailMessage != null)
                {
                    mSmtpClient = new SmtpClient();
                    mSmtpClient.Host = this.mSenderServerHost;
                    mSmtpClient.Port = this.mSenderPort;
                    mSmtpClient.UseDefaultCredentials = false;  //不适用默认凭证
                    mSmtpClient.EnableSsl = this.mEnableSsl;
                    if (this.mEnablePwdAuthentication)
                    {
                        System.Net.NetworkCredential nc = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);     //身份凭证                   
                        mSmtpClient.Credentials = nc.GetCredential(mSmtpClient.Host, mSmtpClient.Port, "NTLM");//身份凭证
                    }
                    else
                    {
                        mSmtpClient.Credentials = new System.Net.NetworkCredential(this.mSenderUsername, this.mSenderPassword);//身份凭证
                    }
                    mSmtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;    //发送方式为网络发送
                    mSmtpClient.Send(mMailMessage); //发送
                }
            }
            catch (Exception e)
            {
                //Console.WriteLine(e.Message);
                throw e;
            }
        }
    }
}

还有一些数据在web.config中配置,如:邮件地址,邮件登录名,密码,收件人

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>

    <!--系统邮件发送设置-->
    <add key="eMailServer" value="172.127.13.154"/>
    <add key="eMailSenderUsername" value="小明"/>
    <add key="eMailSenderPassword" value="123"/>
    <!--程序出错人邮箱地址,个人邮箱-->
    <add key="MonitorPerson" value="haiqing.yang@xx.com"/>

  </appSettings>
</configuration>

运行结果如下:

这里写图片描述

### 回答1: Canape是一款网络抓包工具,可以帮助开发者进行网络数据的抓取和分析。通过Canape,我们可以监测和分析HTTP、HTTPS、WebSocket等协议的数据包,了解网络请求和响应的内容和结构。 想要下载Canape,我们可以通过官方网站进行下载。在官方网站上,我们可以找到Canape的最新版本,点击下载按钮即可开始下载。下载完成后,我们需要解压安装包,并按照安装向导的提示进行安装。安装完成后,我们就可以开始使用Canape进行网络数据的抓取和分析了。 而CSDN则是一个面向IT技术人员的技术问答社区,提供各种各样的技术文章、技术问答和资讯等。在CSDN上,我们可以找到各种与技术相关的文章和教程,帮助我们学习和解决实际问题。 如果我们想要使用CSDN,我们可以直接在浏览器中输入csdn.net的网址,然后点击进入网站。在CSDN的首页上,我们可以看到各种热门的技术文章和话题,我们可以点击感兴趣的内容进行阅读。此外,如果我们想要发布问题或者参与技术讨论,我们需要注册一个CSDN账号,然后登录后才能进行操作。 总之,通过Canape可以方便地进行网络数据的抓取和分析,而CSDN则是一个技术问答社区,供我们学习和与他人进行技术交流。 ### 回答2: Canape下载是指从网络上获取Canape软件的过程。Canape是一款流行的Web漏洞扫描工具,被广泛用于网络安全测试和漏洞扫描。要下载Canape,可以通过访问官方网站或其他可信的软件下载平台来获取。用户可以在这些网站上找到Canape的最新版本,并根据操作系统的类型选择合适的下载版本。 CSDN是中国的技术论坛和学术交流平台,全称是中国软件开发网。它提供了包括技术博客、问答、下载、培训、资源分享等多种服务,是程序员、工程师等技术人员广泛使用的网站之一。在CSDN上,用户可以浏览和发布技术博客、提问和回答问题、下载软件和学习资料等。 CSDN作为一个开放而活跃的技术社区,为广大技术爱好者提供了一个互动的平台。用户可以通过在CSDN上发布技术博客,分享自己的经验和心得,与其他技术专家和爱好者进行交流和讨论。此外,用户还可以在CSDN上找到大量的开源软件和学习资料,并通过下载来加深自己的技术知识。 总之,Canape下载是获取流行的Web漏洞扫描工具Canape软件的过程,而CSDN是中国的技术论坛和学术交流平台,为广大技术爱好者提供了一个互动的平台,提供技术博客、问答、下载、培训等多种服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值