【原】得心应手小工具开发——初步统计博客园首页博文的回复率
【开发动机】
经常会习惯性的打开博客园的首页,看一些精彩的技术文章,这里的技术氛围非常不错,大家写博文的热情也一直感染着我。
今天中午时突然有一个想法,统计一下博客园首页的这些博文的回复率吧,顺便练练手。由于是中午休息一个来小时的东西,所以只是作了一个大体的功能实现,没有作太多修饰和输入验证等内容。
【开发实现】
实现的过程也非常简单。
一、新建一个winform项目,画一个简单的窗体,拖几个控件上来。
“统计多少个分页”的意思是想要统计的博客园首页的分页数。
二、实现思路:
1、构造一个list存入欲统计的分页URL
2、对每个URL分别获取HTML源代码,然后通过字符串的检索、定位、剥离再检索的方式取到评论数和阅读数,作为键值对存入Dictionary<>.
3、对Dictionary<>中的数据进行统计,拼接字符串 并显示到TextBox.
三、代码部分
Dictionary<int, int> commentAndRead = new Dictionary<int, int>(); private int totalcomment; private int totalread; private void tongji_Click(object sender, EventArgs e) { //有多少个分页就构造出多少个url int pagecount = Convert.ToInt32(this.txtpage.Text); List<string> pageurls = new List<string>(); for(int i=1;i<=pagecount;i++) { if(i==1) { string url = @"http://www.cnblogs.com/index.html"; pageurls.Add(url); } else { string url = @"http://www.cnblogs.com/" + "p" + i; pageurls.Add(url); } } //按url去读取HTML代码 foreach(var url in pageurls) { string strHTML = ""; WebClient wc = new WebClient(); #region 由于公司里访问外网要通过代理,所以要先简单配置一下代理服务器,直接上网的话可以注掉这段 System.Net.WebProxy oWebProxy = new System.Net.WebProxy("172.16.154.100", 8080); oWebProxy.UseDefaultCredentials = true; wc.Proxy = oWebProxy; #endregion wc.Encoding = Encoding.UTF8; //字符编码 strHTML = wc.DownloadString(url); //检索HTML中评论与阅读的量 htmldispose(strHTML); } //统计,拼接字符串,输出 foreach(var c in commentAndRead) { totalread += c.Key; totalcomment += c.Value; } StringBuilder sb = new StringBuilder(); sb.AppendFormat("共检索{0}页,共{1}篇博文 \r\n ",this.txtpage.Text,commentAndRead.Count.ToString()); sb.AppendLine("阅读量:"+totalread); sb.AppendLine("评论量:" + totalcomment); sb.AppendLine("回复率:" + ((Convert.ToDouble(totalcomment) / Convert.ToDouble(totalread))*100).ToString("0.00") + "%"); this.textBox2.Text = sb.ToString(); } private void htmldispose(string html) { int commentstart = html.IndexOf("评论(<span id="); if(commentstart!=-1) { int commentend = html.IndexOf("</span>)</a></span> <span class="); int comment = Convert.ToInt32(html.Substring(commentstart + 37, commentend - commentstart - 37)); string htmlCut = html.Substring(commentend); int readstart = htmlCut.IndexOf("阅读(<span id="); int readend = htmlCut.IndexOf("</span>)</a></span></div>"); int read = Convert.ToInt32(htmlCut.Substring(readstart + 32, readend - readstart - 32)); try { commentAndRead.Add(read, comment); } catch { // 有相同数量的阅读量的博文存在,跳过 } string htmlretain = htmlCut.Substring(readend); htmldispose(htmlretain); } else { return; } }
【工具演示】
【总结】
通过统计,博客园首页的博文的回复率大约为千分之五左右,个人认为不是很高,希望大家还是多多回复啊,你的回复就是博主推出更多原创的动力啊!
本文出处:http://www.cnblogs.com/ytaozhao 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。