温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何利用正则表达式抓取博客园列表数据

发布时间:2021-09-28 16:51:02 来源:亿速云 阅读:108 作者:小新 栏目:互联网科技

这篇文章主要为大家展示了“如何利用正则表达式抓取博客园列表数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何利用正则表达式抓取博客园列表数据”这篇文章吧。

在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间。

现在我就来把我抓取博客园数据的过程叙述一下,如果有朋友有更好的意见,欢迎提出来。

要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用regulator,这个正则表达式工具,我们可以先使用这个工具把我们要使用的正则表达式拼接出来,然后在程序中使用。

我发现博客园的首页列表可以通过http://www.cnblogs.com/p1,p2...这种方式来直接访问,这样我们就可以直接通过url获取数据,而不用模拟数据点击事件来虚拟的点击下一页的那个按钮获取数据,更加方便。因为我的目的就是抓取一些数据,所以就简单点。

1.首先就是要写对应的sql Helper类,相信这是很多程序员都会掌握的,无非就是增删改查的操作。在创建好了sqlhelper类之后,我们就可以开始进行抓取数据的逻辑处理。

2.创建BlogRegexController

public class BlogRegexController : Controller
   {
     public void ExecuteRegex()
     {
       string strBaseUrl = "http://www.cnblogs.com/p"; //定义博客园可以访问的列表数据的基地址
       for (int i = ; i <= ; i++)//因为博客园首页列表最大只有页,所以我们这个循环就执行次
       {
         string strUrl = strBaseUrl + i.ToString();
         BlogRege blogRegex = new BlogRege(); //定义的具体的Regex类 抓取博客园地址
         string result = blogRegex.SendUrl(strUrl);
         blogRegex.AnalysisHtml(result);
 
         Response.Write("获取成功");
       }
     }
 
     //
     // GET: /BlogRegex/
 
     public ActionResult Index()
     {
       ExecuteRegex();
       return View();
     }
 
   }

在controller中的ExecuteRegex()方法就是执行抓取博客园列表数据的功臣。

3.首先就是其中定义的BlogRege类,他负责抓取博客园列表数据并将其插入到数据库中

public class BlogRege
   {   //负责把数据插入到数据库中 使用到的是sqlhelper类
     public void Insert(string title, string content,string linkurl, int categoryID = )
     {
       SqlHelper helper = new SqlHelper();
       helper.Insert(title, content, categoryID,linkurl);
     }
     /// <summary>
     /// 通过Url地址获取具体网页内容 发起一个请求获得html内容
     /// </summary>
     /// <param name="strUrl"></param>
     /// <returns></returns>
     public string SendUrl(string strUrl)
     {
       try
       {
         WebRequest webRequest = WebRequest.Create(strUrl);
         WebResponse webResponse = webRequest.GetResponse();
         StreamReader reader = new StreamReader(webResponse.GetResponseStream());
         string result = reader.ReadToEnd();
         return result;
       }
       catch (Exception ex)
       {
         throw ex;
       }
     }
     /// <summary>
     /// 分析Html 解析出里面具体的数据
     /// </summary>
     /// <param name="htmlContent"></param>
     public void AnalysisHtml(string htmlContent)
     {//这个就是我在regulator正则表达式工具中拼接获取到的正则表达式 还有一点请注意就是转义字符的问题
       string strPattern = "<div\\s*class=\"post_item\">\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*<div\\s*class=\"post_item_body\">\\s*<h><a\\s*class=\"titlelnk\"\\s*href=\"(?<href>.*)\"\\s*target=\"_blank\">(?<title>.*)</a>.*\\s*<p\\s*class=\"post_item_summary\">\\s*(?<content>.*)\\s*</p>";
       Regex regex = new Regex(strPattern, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.CultureInvariant);
       if (regex.IsMatch(htmlContent))
       {
         MatchCollection matchCollection = regex.Matches(htmlContent);
         foreach (Match match in matchCollection)
         {
           string title = match.Groups[].Value;//获取到的是列表数据的标题
           string content = match.Groups[].Value;//获取到的是内容
           string linkurl=match.Groups[].Value;//获取到的是链接到的地址
          Insert(title, content,linkurl);//执行插入到数据库的操作
         }
       }
     }
   }

4.通过上面的代码我们可以很轻松的从博客园中获取我们用来测试的数据,方便快捷,而且真实,比我们手动输入的速度要快很多。

正则表达式其实不应该算是一种语言,只能算是一种语法,因为任何的语言包括C#,javascript等语言都对正则表达式有很好的支持,只是他们的使用语法稍有不同,其实只要我们可以正确的拼接出正则表达式,那么我们抓取任何网站的内容都可以很轻松的做到。前一段我试着抓取了淘宝的数据,一共抓取了有几百万条,我想应该还有很多没有抓取到,不得不佩服淘宝,数据量太大。

回到我们使用的C#语言上,其实对正则表达式也有着非常好的支持,Regex就是用来对正则表达式进行操作的类,所有的对正则表达式的操作都在这个类中。

如果你对正则表达式还不是太熟悉,网上有一篇正则表达式30分钟入门教程,大家可以参考一下,写的很不错。再加上使用一个正则表达式工具,相信可以抓取到任何你想的内容。

在拼接正则表达式的时候,可能会花费很长时间,毕竟要分析html结构,从中抓取内容。希望大家可以沉住气,因为只要正则表达式拼接正确,那么一定可以抓取正确的内容。

为了避免大家说只说不做,那么我就把我抓取的博客园首页内容秀一下,因为博客园首页数据会有更新,所以大家可以看到这些数据都是在博客园中顺序存在的。

如何利用正则表达式抓取博客园列表数据

博客园每页列表是20条,一共200页,所以一共是4000条。数据抓取正确。

以上是“如何利用正则表达式抓取博客园列表数据”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI