手机版

描述:通过正则表达式抓取Blog Park的列表数据

时间:2021-10-01 来源:互联网 编辑:宝哥软件园 浏览:

鉴于我需要测试数据来模仿ASP.NET MVC 3中Blog Park的企业系统才能完成,自己也太累了,所以抓取了Blog Park的部分列表数据。请不要见怪都都。

博主公园数据抓取时使用正则表达式,不熟悉正则表达式的朋友可以参考相关资料。其实很容易掌握,就是具体的例子需要一些时间。

现在,我将描述捕获博客公园数据的过程。如果有朋友有更好的意见,请提出来。

要使用正则表达式抓取数据,我们必须首先创建一个用于匹配的正则表达式。我推荐使用正则表达式工具regulator。我们可以使用这个工具先拼接我们想要使用的正则表达式,然后在程序中使用它们。

我发现Blog Park的主页列表可以通过http://www.cnblogs.com/p1,p2.直接访问,这样我们就可以直接通过url获取数据,而不是模拟数据点击事件来虚拟点击下一页的按钮获取数据,这样更方便。因为我的目标是抓取一些数据,很简单。

1.第一件事就是编写相应的sql Helper类,相信很多程序员都会掌握,它无非就是添加、删除、修改和检查。创建sqlhelper类后,我们可以开始抓取数据的逻辑处理。

2.创建BlogRegexController。

公共类blogreexcontroller : Controller { public void ExecuteRegex(){ string strBaseUrl=' http://www . cn blogs.com/p ';//定义Blog Park可以访问的列表数据的基址(int I=;I=;I )//因为blog park的主页列表最多只有页面,所以我们将执行这个循环一次{ string strurl=str base URL I . tostring();BlogRege blogRegex=new BlogRege();//定义的特定Regex类抓取blogger park string result=blog Regex . send URL(strurl)的地址;blogRegex。AnalysisHtml(结果);回应。写(‘成功’);} }////GET:/BlogRegex/public action result Index(){ ExecuteRegex();返回视图();}}控制器中的ExecuteRegex()方法是抓取博客公园列表数据的英雄。

3.首先是其中定义的BlogRege类,负责抓取Blog Park的列表数据并插入数据库。

公共博客rege {//负责将数据插入数据库,使用sqlhelper类公共void insert(字符串标题、字符串内容、字符串链接url、int categoryid=){ sqlhelper helper helper=new sqlhelper();帮手。插入(标题、内容、categoryID、link URL);}///Summary////通过Url地址获取特定的网页内容并发起获取html内容的请求/////Summary//param name=' strurl '/param///returns/returns public string send Url(string strurl)。{尝试{ WebRequest=WebRequest。创建(StrUrl);webResponse=webRequest。GetResponse();stream reader=new stream reader(WebResponse。GetResponseStream());字符串结果=reader。ReadToEnd();返回结果;} catch(Exception ex){ throw ex;} }///Summary////Analyze Html分析/////Summary///param name=' Html content '/param public void analysis Html(string Html content){///。这是我在调节器的正则表达式工具中拼接得到的正则表达式,还有一点需要注意的是转义字符的问题:string strpattern=' div \ \ s * class=\ ' post _ item \ ' \ \ s *。* \ \ s *。* \ \ s *。* \ \ s *。s * class=\ ' post _ item _ body \ ' \ \ s * ha \ \ s * class=\ ' title lnk \ ' \ \ s * href=\ '(?href。*)\'\\s*target=\'_blank\ '(?标题。*)/a . * \ \ s * p \ \ s * class=\ ' post _ item _ summary \ ' \ \ s *(什么?内容。*)\ \ s */p ';Regex regex=new Regex(strPattern,RegexOptions。IgnoreCase | RegexOptions。Multiline | RegexOptions。culture不变量);if(正则表达式。IsMatch(html content)){ match collection match collection=regex。匹配(HTMl Content);foreach(Match collection中的Match){ string title=Match。组[]。价值;//列表数据的标题为string content=match。组[]。价值;//获取了内容字符串linkurl=match。组[]。价值;//获取了链接地址Insert(标题、内容、链接URL);//执行插入数据库的操作}}} }4。通过上面的代码,我们可以很容易的从博客公园获取到我们用来测试的数据,方便、快捷、真实,比人工输入的速度要快很多。

其实,正则表达式不应该被看作是一种语言,而是一种语法,因为任何语言,包括C#、javascript等。对正则表达式有很好的支持,但它们的用法语法略有不同。其实只要我们能正确拼接正则表达式,就能轻松抓取任何网站的内容。上一段我尝试爬淘宝的数据,总共有几百万条。我觉得还是有很多遗漏的,不得不佩服淘宝,因为数据量太大了。

回到我们使用的C#语言,它实际上对正则表达式有很好的支持。Regex是一个用来操作正则表达式的类,所有对正则表达式的操作都在这个类中。

如果你不熟悉正则表达式,网上有一个30分钟的正则表达式入门教程,你可以参考一下,写得很好。加上使用正则表达式工具,相信你可以抓取任何你想要的东西。

拼接正则表达式可能需要很长时间。毕竟,有必要分析html结构并从中抓取内容。希望大家沉住气,因为只要正则表达式拼接正确,就能抓取到正确的内容。

为了避免说而不做,我将展示我抓取的博客公园主页的内容。因为博客公园主页的数据会更新,所以可以看到这些数据是按顺序存在于博客公园中的。

博客公园每页有20个列表,总共有200页,所以总共有4000个列表。数据捕获正确。

我之前说过,只有懂代码的程序员不一定是合格的程序员。程序员应该尽可能减少工作量,因为我们都是高智商的人。因此,我们应该积极学习各种有助于我们工作的框架或方法,如IOC、Entity Framework或Nhibernate框架,以减轻我们开发和维护代码的负担。毕竟,当我们听到需求需要改变的反映时,一般都是先生气,再骂,最后修改。有些框架可以帮助我们,给我们带来维护代码的好心情,为什么不呢?

最后我想说,因为我想开发一个简单的仿照Blog Park (MVC3)的网站,所以我会用各种技术准备。我会提前写出来,整理要用的内容,这样可以加快以后的发展。

下一次,我将整理出在MVC中使用文本编辑器KindEditor的方法。希望大家有什么好的意见或者材料提供,让我补充一些见解。谢谢你

版权声明:描述:通过正则表达式抓取Blog Park的列表数据是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐