菜鸟求助,用正规表达式抓取网页数据
1个回答
展开全部
鉴于我在要完成的asp.net MVC 3 仿照博客园企业系统要用到测试数据,我自己输入太累,所以我就抓取了博客园的部分列表数据,还请dudu不要见怪。
在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间。
现在我就来把我抓取博客园数据的过程叙述一下,如果有朋友有更好的意见,欢迎提出来。
要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用regulator,这个正则表达式工具,我们可以先使用这个工具把我们要使用的正则表达式拼接出来,然后在程序中使用。
我发现博客园的首页列表可以通过http://www.cnblogs.com/p1,p2...这种方式来直接访问,这样我们就可以直接通过url获取数据,而不用模拟数据点击事件来虚拟的点击下一页的那个按钮获取数据,更加方便。因为我的目的就是抓取一些数据,所以就简单点。
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 }
在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间。
现在我就来把我抓取博客园数据的过程叙述一下,如果有朋友有更好的意见,欢迎提出来。
要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用regulator,这个正则表达式工具,我们可以先使用这个工具把我们要使用的正则表达式拼接出来,然后在程序中使用。
我发现博客园的首页列表可以通过http://www.cnblogs.com/p1,p2...这种方式来直接访问,这样我们就可以直接通过url获取数据,而不用模拟数据点击事件来虚拟的点击下一页的那个按钮获取数据,更加方便。因为我的目的就是抓取一些数据,所以就简单点。
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 }
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
上海华然企业咨询
2024-10-21 广告
2024-10-21 广告
上海华然企业咨询有限公司专注于AI与数据合规咨询服务。我们的核心团队来自头部互联网企业、红圈律所和专业安全服务机构。凭借深刻的AI产品理解、上百个AI产品的合规咨询和算法备案经验,为客户提供专业的算法备案、AI安全评估、数据出境等合规服务,...
点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询