【開發動機】
經常會習慣性的開啟部落格園的首頁,看一些精彩的技術文章,這裡的技術氛圍非常不錯,大家寫博文的熱情也一直感染著我。
今天中午時突然有一個想法,統計一下部落格園首頁的這些博文的回複率吧,順便練練手。由於是中午休息一個來小時的東西,所以只是作了一個大體的功能實現,沒有作太多修飾和輸入驗證等內容。
【開發實現】
實現的過程也非常簡單。
一、建立一個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 由於公司裡訪問外網要通過代理,所以要先簡單配置一下Proxy 伺服器,直接上網的話可以注掉這段 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; } }【工具示範】
【總結】
通過統計,部落格園首頁的博文的回複率大約為千分之五左右,個人認為不是很高,希望大家還是多多回複啊,你的回複就是博主推出更多原創的動力啊!
作者:Tony zhao 歡迎訪問:找與淘網
本文出處:http://www.cnblogs.com/ytaozhao 本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。