利用正则表达式获取博客园随笔(二)

  有几个朋友提到说我昨天开头提到的那些跟正则不符,其实确实也是不符合的。先来说说原因吧,之前呢因为各种原因,好久没上VS了,然后系统又是自动打补丁的,然后就更新了那2个补丁。然后吧,前天想开始写的时候打开一看吧,新建错误,打开原来的显示VS出现问题什么的。然后就想想自己这系统装了将近4个月了,然后就把他给还原了,所以才有了前天的那篇。然后昨晚回来打开一看,又是这样。觉得大家应该会碰到,所以就说了一下,顺便自己作为一个保留。废话不多说了开始。

  昨天我们写的那个正则已经可以把每条随笔给匹配出来了,如下图所示:

然后么,我们再仔细观察单条随笔上的内容,然后找寻规律,我匹配出来的正则是这样的:

"<h3><a.*?href="(?<href>.*?)".*?>(?<Title>.*?)</a></h3>.*?<a .*? class="lightblue".*?>(?<Author>.*?)</a>.*?发布于.*?(?<time>.*?)<span"

(感觉有点烂的样子,但好歹已经可以匹配出来了不是么,各位有更好的匹配求推荐啊)

既然匹配出来了那就可以获取了.下面贴上代码

DataTable dt = new DataTable();//定义一个datatable来存放数据
dt.Columns.Add("Title");
dt.Columns.Add("Author");
dt.Columns.Add("time");
dt.Columns.Add("href");
string Html= GetHtml("http://www.cnblogs.com/");
Regex regexContent = new Regex("<div class="post_item_body">(?<content>.*?)<div class="clear"></div>",RegexOptions.Singleline);//获取单个随笔数据
Regex regexProperty = new Regex("<h3><a.*?href="(?<href>.*?)".*?>(?<Title>.*?)</a></h3>.*?<a .*? class="lightblue".*?>(?<Author>.*?)</a>.*?发布于.*?(?<time>.*?)<span",
    RegexOptions.Singleline);//获取标题、时间、链接、作者等
if (regexContent.IsMatch(Html))
    {
        var blog = regexContent.Matches(Html);
        foreach (Match item in blog)
        {
            if (regexProperty.IsMatch(item.ToString()))
                 {
                      var Property = regexProperty.Match(item.ToString());
                      dt.Rows.Add(Property.Groups["Title"].Value, Property.Groups["Author"].Value, Property.Groups["time"].Value, Property.Groups["href"].Value);

                 }
         }
    }
    dgvCnblogs.AutoGenerateColumns = false;
    dgvCnblogs.DataSource = dt;

这个加上昨天的那些可以直接运行的。下面放上效果:

各位可以自己运行看看。还是那句话:各位有问题或者有更好的方法请留言。

原文地址:https://www.cnblogs.com/suixingerxing/p/3231356.html