由于自身在要大功告成的asp.net MVC 3
仿照和讯公司系统要用到测验数据,作者要好输入太累,所以本人就抓取了微博的局地列表数据,还请dudu不要见怪。

采取正则表明式抓取博客园列表数据,正则表明式抓取

是因为笔者在要大功告成的asp.net MVC 3
仿照微博集团系统要用到测量检验数据,作者要好输入太累,所以作者就抓取了新浪的一些列表数据,还请dudu不要见怪。

在抓取微博数据的时候使用了正则表明式,所以有不熟稔正则表明式的恋人能够参谋相关质地,其实很轻便调控,便是在实际的实例中会花些时日。

近期笔者就来把小编抓取和讯数据的经过陈诉一下,借使有意中人有更加好的看法,接待提议来。

要选择正则表明式抓取数据,首先将要创制二个正则表明式实行相称,作者推荐使用regulator,这么些正则表达式工具,大家得以先选取那些工具把大家要采纳的正则表明式拼接出来,然后在先后中央银行使。

自己发觉天涯论坛的首页列表能够经过

1.首先便是要写对应的sql
Helper类,相信这是数不清技士都会垄断(monopoly)的,无非就是增删改查的操作。在开创好了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等语言都对正则表明式有很好的支撑,只是他俩的采取语法稍有例外,其实若是大家能够精确的拼接出正则表明式,那么大家抓取任何网站的从头到尾的经过都足以比较轻巧的姣好。前一段小编试着抓取了Taobao的数目,一共抓取了有几百万条,小编想应该还应该有为数十分的多不曾抓取到,不得不叹服天猫商城,数据量太大。

再次来到大家选用的C#语言上,其实对正则表明式也富有不行好的支撑,Regex正是用来对正则表明式进行操作的类,全体的对正则表达式的操作都在这么些类中。

借使您对正则表明式还不是太掌握,英特网有一篇正则表明式30分钟入门教程,大家可以参见一下,写的很不错。再加上使用一个正则表达式工具,相信能够抓取到任何你想的始末。

在拼接正则表达式的时候,大概会开销不短日子,毕竟要深入分析html结构,从中抓取内容。希望大家能够沉住气,因为一旦正则表达式拼接准确,那么自然可以抓取准确的开始和结果。

为了避免大家说只说不做,那么本身就把自家抓取的今日头条首页内容秀一下,因为微博首页数据会有更新,所以咱们能够见到这个数量都以在天涯论坛中逐一存在的。

必发娱乐官方网站 1

腾讯网每页列表是20条,一共200页,所以一共是伍仟条。数据抓取正确。

我从前说过,只是会代码的程序猿不必然是合格技术员,程序猿应该尽量的滑坡本人的职业量,因为我们都以高智力商数力的人。所以大家应该积极的读书各类对我们的做事有帮带的框架或然是措施,比如IOC、Entity
Framework或Nhibernate框架来减轻大家开辟爱抚代码的担任,毕竟大家听见须求要改换的浮现,一般都以气愤,然后大骂,最终才是修改。有个别框架能够补助大家,给我们保卫安全代码带来好心气,何乐不为呢。

自个儿最后说一句,因为小编要开支二个简便的效仿搜狐的网址(MVC3),所以会用到各类本领希图,作者提前写出来把那么些要用到的开始和结果整理一下,为随后的支付加速。

下一遍,笔者筹算整治一下在MVC中应用文本编辑器KindEditor的不二等秘书技,希望大家借使有好的观念或许材质能够提供一下,让笔者也加码部分有胆有识。感谢各位

鉴于本人在要落成的asp.net MVC 3
仿照新浪公司系统要用到测量检验数据,笔者要好输入太累…

在抓取新浪数据的时候利用了正则表明式,所以有面生正则表明式的意中人能够参照相关质感,其实很轻易调节,正是在切实的实例中会花些日子。

到现在本人就来把本身抓取新浪数据的历程陈述一下,假设有意中人有更加好的眼光,款待建议来。

要使用正则表明式抓取数据,首先将要创设多少个正则表明式进行相配,作者引进应用regulator,那些正则表明式工具,大家能够先使用那些工具把大家要运用的正则表达式拼接出来,然后在程序中动用。

本身发掘天涯论坛的首页列表能够透过

1.率先正是要写对应的sql
Helper类,相信这是相当多工程师都会掌握的,无非正是增加和删除改查的操作。在开创好了sqlhelper类之后,我们就能够初叶张开抓取数据的逻辑管理。

2.创建BlogRegexController

 1 public class BlogRegexController : Controller   2     {   3    4         public void ExecuteRegex()   5         {   6             string strBaseUrl = "http://www.cnblogs.com/p"; //定义博客园可以访问的列表数据的基地址   7             for (int i = 1; i <= 200; i++)//因为博客园首页列表最大只有200页,所以我们这个循环就执行200次   8             {   9                 string strUrl = strBaseUrl + i.ToString();  10                 BlogRege blogRegex = new BlogRege(); //定义的具体的Regex类 抓取博客园地址  11                 string result = blogRegex.SendUrl(strUrl);  12                 blogRegex.AnalysisHtml(result);  13   14                 Response.Write("获取成功");  15             }  16         }  17   18   19         //  20         // GET: /BlogRegex/  21   22         public ActionResult Index()  23         {  24             ExecuteRegex();  25             return View();  26         }  27   28     }

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

3.先是正是在那之中定义的BlogRege类,他担当抓取和讯列表数据并将其插入到数据库中

 1 public class BlogRege   2     {      //负责把数据插入到数据库中 使用到的是sqlhelper类   3         public void Insert(string title, string content,string linkurl, int categoryID = 1)   4         {   5             SqlHelper helper = new SqlHelper();   6             helper.Insert(title, content, categoryID,linkurl);   7         }   8    9         /// <summary>  10         /// 通过Url地址获取具体网页内容 发起一个请求获得html内容  11         /// </summary>  12         /// <param name="strUrl"></param>  13         /// <returns></returns>  14         public string SendUrl(string strUrl)  15         {  16             try  17             {  18                 WebRequest webRequest = WebRequest.Create(strUrl);  19                 WebResponse webResponse = webRequest.GetResponse();  20                 StreamReader reader = new StreamReader(webResponse.GetResponseStream());  21                 string result = reader.ReadToEnd();  22                 return result;  23             }  24             catch (Exception ex)  25             {  26                 throw ex;  27             }  28         }  29   30         /// <summary>  31         /// 分析Html  解析出里面具体的数据  32         /// </summary>  33         /// <param name="htmlContent"></param>  34         public void AnalysisHtml(string htmlContent)  35         {//这个就是我在regulator正则表达式工具中拼接获取到的正则表达式  还有一点请注意就是转义字符的问题  36             string strPattern = "<div\\s*class=\"post_item\">\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*.*\\s*<div\\s*class=\"post_item_body\">\\s*<h3><a\\s*class=\"titlelnk\"\\s*href=\"(?<href>.*)\"\\s*target=\"_blank\">(?<title>.*)</a>.*\\s*<p\\s*class=\"post_item_summary\">\\s*(?<content>.*)\\s*</p>";  37   38             Regex regex = new Regex(strPattern, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.CultureInvariant);  39             if (regex.IsMatch(htmlContent))  40             {  41                 MatchCollection matchCollection = regex.Matches(htmlContent);  42                 foreach (Match match in matchCollection)  43                 {  44                     string title = match.Groups[2].Value;//获取到的是列表数据的标题  45                     string content = match.Groups[3].Value;//获取到的是内容  46                     string linkurl=match.Groups[1].Value;//获取到的是链接到的地址  47                    Insert(title, content,linkurl);//执行插入到数据库的操作  48                 }  49               50               51             }  52           53         }  58     }

4.经过地点的代码我们得以很自在的从和讯中获得咱们用来测量检验的数码,方便快捷,并且真正,比我们手动输入的进度要快比相当多。

正则表明式其实不该算是一种语言,只好算是一种语法,因为其它的言语包蕴C#,javascript等语言都对正则表明式有很好的支撑,只是他俩的选拔语法稍有例外,其实假如大家能够准确的拼接出正则表明式,那么我们抓取任何网址的从头到尾的经过都足以很轻松的姣好。前一段小编试着抓取了Taobao的多寡,一共抓取了有几百万条,小编想应该还会有为数非常的多不曾抓取到,不得不叹服天猫商城,数据量太大。

回到大家选拔的C#语言上,其实对正则说明式也存有充裕好的支撑,Regex正是用来对正则表达式实行操作的类,全部的对正则表明式的操作都在那么些类中。

只要您对正则表明式还不是太熟知,网络有一篇正则表明式30分钟入门教程,我们可以参谋一下,写的很不错。再拉长选取三个正则表明式工具,相信能够抓取到别的你想的源委。

在拼接正则表明式的时候,或然会费用很短日子,终归要深入分析html结构,从中抓取内容。希望我们能够沉住气,因为一旦正则表明式拼接正确,那么必然能够抓取正确的剧情。

为了制止大家说只说不做,那么本人就把本身抓取的新浪首页内容秀一下,因为新浪首页数据会有立异,所以大家能够看看那个数据都以在博客园中逐个存在的。

必发娱乐官方网站 2

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

本人以前说过,只是会代码的程序猿不料定是合格技术员,程序猿应该尽只怕的削减自个儿的工作量,因为大家都是高智力商数力的人。所以大家相应主动的求学各个对大家的工作有扶持的框架或许是方法,比方IOC、Entity
Framework或Nhibernate框架来缓慢消除大家付出体贴代码的负责,毕竟大家听到供给要退换的呈现,一般都是恼怒,然后大骂,最终才是修改。有个别框架能够帮忙大家,给大家爱惜代码带来好心气,何乐不为呢。

本身最终说一句,因为自个儿要开拓二个大致的模仿天涯论坛的网址(MVC3),所以会用到各样技术绸缪,作者提前写出来把那一个要用到的剧情整理一下,为以后的费用加快。

下二遍,作者计划收拾一下在MVC中使用文本编辑器KindEditor的方式,希望大家只要有好的见地或许材质能够提供一下,让本身也扩充一些见闻。谢谢各位

索引:

Asp.net MVC 使用Autofac的简单使用 IOC (2012-12-12 13:16)            
Asp.net MVC 仿照博客园的简单网站首页 列表设计 (2012-12-11 22:21)            
为什么要从Web form过渡到MVC中 (2012-12-09 22:4)            
Asp.net MVC3 企业网站系统高仿博客园 首页左侧列表页面 实现效果 (2012-12-08 19:11)            
Asp.net MVC 3 开发企业网站系统仿照博客园部分功能–总体设计 (2012-12-05 23:41)            
Asp.net MVC 3 开发简单的企业系统开篇–数据库 (2012-12-03 21:03)            
Asp.net MVC 3 开发一个简单的企业网站系统

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注