随手正则写的CSDN【只看楼主】功能

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

写这个的时候居然没有看到原来CSDN已经有这个功能了,写完代码了突然发现原来早就已经有了。

现把代码贴出来吧,虽然有很多解析HTML的开源类库如:http://htmlagilitypack.codeplex.com/,但我一直习惯于正则匹配。

截图:

呵呵,起码还能看吧@——#

1PRivatevoidbutton1_Click(objectsender, EventArgs e)2{3if(!string.IsNullOrEmpty(txtCsdnUrl.Text.Trim()))4{5stringurl =txtCsdnUrl.Text.Trim();6stringhtmlSource =string.Empty;7htmlSource =GetHtmlSource(url);8intpageCount =GetPageCount(htmlSource);9stringcontext =string.Empty;1011if(pageCount >1)12{13for(inti =1; i <= pageCount; i++)14{15htmlSource = GetHtmlSource(url +"?page="+i);1617context+=GetLZArticle(htmlSource);18}19}20else21{22context +=GetLZArticle(htmlSource);23}2425richTextBox1.Text =context;2627}28else29{30MessageBox.Show("请输入地址");31}32}3334///<summary>35///获取源代码36///</summary>37///<param name="Url"></param>38///<returns></returns>39publicstringGetHtmlSource(stringUrl)40{41WebClient client =newWebClient();42client.Headers.Add("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");43Stream data =client.OpenRead(Url);44stringresult =string.Empty;45using(StreamReader reader =newStreamReader(data, Encoding.UTF8))46{47result =reader.ReadToEnd();48}4950returnresult;51}5253///<summary>54///获取贴子总页数 URL格式:http://bbs.csdn.net/topics/390730011?page=255///</summary>56///<returns>返回最大页数</returns>57publicintGetPageCount(stringHtmlSource)58{59intpageCount =0;6061Regex reg =newRegex("<select class=\"jumpMenu\" name=\"jumpMenu\">(?<val>.*?)</select>", RegexOptions.Singleline |RegexOptions.IgnoreCase);62stringhtmlSource =HtmlSource;63Regex reg1 =newRegex("<option.*?>(?<val>.*?)</option>", RegexOptions.Singleline |RegexOptions.IgnoreCase);64intcount = reg1.Matches(reg.Match(htmlSource).Groups["val"].Value).Count;6566int.TryParse(reg1.Matches(reg.Match(htmlSource).Groups["val"].Value)[count -1].Groups["val"].Value,67outpageCount);6869returnpageCount;70}7172///<summary>73///获取文章标题74///</summary>75///<param name="HtmlSource">网页内容</param>76///<returns></returns>77publicstringGetArticleTitle(stringHtmlSource)78{79stringtitle =string.Empty;8081Regex reg =newRegex("<span class=\"title text_overflow\">(?<title>.*?)</span>", RegexOptions.Singleline |RegexOptions.IgnoreCase);8283title = reg.Match(HtmlSource).Groups["title"].Value;8485returntitle;86}878889publicstringGetAuthorName(stringHtmlSource)90{91stringresult =string.Empty;9293Regex regex =newRegex("<a class=\"p-author\" href=\"#\">(?<value>.*?)</a>");9495result = regex.Match(HtmlSource).Groups["value"].Value;9697returnresult;98}99100publicstringGetLZArticle(stringHtmlSource)101{102103stringresult =string.Empty;104stringauthorName =GetAuthorName(HtmlSource);105106Regex regex =newRegex("<td valign=\"top\" class=\"post_info .*?\" data-username=\""+ authorName +"\".*?>.*?<div class=\"post_body\">(?<value>.*?)</div>.*?</td>", RegexOptions.Singleline |RegexOptions.IgnoreCase);107108for(inti =0; i < regex.Matches(HtmlSource).Count; i++)109{110result += regex.Matches(HtmlSource)[i].Groups["value"].Value;111result +="--------------------分隔线--------------------";112}113returnresult.Trim().Replace("<br />","\r\n");114}

代码都在这里了。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航