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

    xiaoxiao2021-03-25  113

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

    Step1:在中每个用户都有自己的主页的地址(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;\"Young用户量访问同步</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, //抄送人收件箱地址 "用户量访问同步", //邮件标题 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>

    运行结果如下:

    转载请注明原文地址: https://ju.6miu.com/read-3095.html

    最新回复(0)