欢迎来到福编程网,本站提供各种互联网专业知识!

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

发布时间:2015-09-28 作者:baidixing 来源:转载
这篇文章主要介绍了利用正则表达式抓取博客园列表数据的相关资料,需要的朋友可以参考下

鉴于我在要完成的asp.net MVC 3 仿照博客园企业系统要用到测试数据,我自己输入太累,所以我就抓取了博客园的部分列表数据,还请dudu不要见怪。

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

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

要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用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);
     }
     /// 
     /// 通过Url地址获取具体网页内容 发起一个请求获得html内容
     /// 
     /// 
     /// 
     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;
       }
     }
     /// 
     /// 分析Html 解析出里面具体的数据
     /// 
     /// 
     public void AnalysisHtml(string htmlContent)
     {//这个就是我在regulator正则表达式工具中拼接获取到的正则表达式 还有一点请注意就是转义字符的问题
       string strPattern = "s*.*s*.*s*.*s*.*s*.*s*.*s*.*s*s*.*)"s*target="_blank">(?.*)</a>.*s*<ps*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);//执行插入到数据库的操作
         }
       }
     }
   }</pre>

<p>4.通过上面的代码我们可以很轻松的从博客园中获取我们用来测试的数据,方便快捷,而且真实,比我们手动输入的速度要快很多。</p>
<p>正则表达式其实不应该算是一种语言,只能算是一种语法,因为任何的语言包括C#,javascript等语言都对正则表达式有很好的支持,只是他们的使用语法稍有不同,其实只要我们可以正确的拼接出正则表达式,那么我们抓取任何网站的内容都可以很轻松的做到。前一段我试着抓取了淘宝的数据,一共抓取了有几百万条,我想应该还有很多没有抓取到,不得不佩服淘宝,数据量太大。</p>
<p>回到我们使用的C#语言上,其实对正则表达式也有着非常好的支持,Regex就是用来对正则表达式进行操作的类,所有的对正则表达式的操作都在这个类中。</p>
<p>如果你对正则表达式还不是太熟悉,网上有一篇正则表达式30分钟入门教程,大家可以参考一下,写的很不错。再加上使用一个正则表达式工具,相信可以抓取到任何你想的内容。</p>
<p>在拼接正则表达式的时候,可能会花费很长时间,毕竟要分析html结构,从中抓取内容。希望大家可以沉住气,因为只要正则表达式拼接正确,那么一定可以抓取正确的内容。</p>
<p>为了避免大家说只说不做,那么我就把我抓取的博客园首页内容秀一下,因为博客园首页数据会有更新,所以大家可以看到这些数据都是在博客园中顺序存在的。</p>
<p style="text-align: center"><img alt="" src="http://files.jb51.net/file_images/article/201509/201509280958298.png" /></p>
<p>博客园每页列表是20条,一共200页,所以一共是4000条。数据抓取正确。</p>
<p>我以前说过,只是会代码的程序员不一定是合格程序员,程序员应该尽可能的减少自己的工作量,因为我们都是高智商的人。所以我们应该积极的学习各种对我们的工作有帮助的框架或者是方法,比如IOC、Entity Framework或Nhibernate框架来减轻我们开发维护代码的负担,毕竟我们听到需求要更改的反映,一般都是愤怒,然后大骂,最后才是修改。有些框架能够帮助我们,给我们维护代码带来好心情,何乐而不为呢。</p>
<p>我最后说一句,因为我要开发一个简单的仿照博客园的网站(MVC3),所以会用到各种技术准备,我提前写出来把这些要用到的内容整理一下,为以后的开发加速。</p>
<p>下一次,我准备整理一下在MVC中使用文本编辑器KindEditor的方法,希望大家如果有好的意见或者资料可以提供一下,让我也增加一些见识。谢谢各位</p></div>
                <div class="prev-next">
					<div class="prev">上一篇:<a href="/regular/item-17656.html">正则表达式问号的四种用法详解</a></div><div class="next">下一篇:<a href="/regular/item-17654.html">最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等</a></div>
				</div>
			</div>
			<!--广告 start-->
			<div class="qf-ads"><ul class="qf-ads-nUl-12"><li><a href="" target="_blank"><img src="/uploads/images/ads/202306/20230610084915300842.jpg"></a><a href="" target="_blank" class="alink"><label>广告</label><span>商业广告,理性选择</span></a></li></ul></div>
			<div class="qf-article-container">
				<div class="qf-cms-name">
					<h3>相关推荐</h3>
				</div>
				<div class="qf-cms-container">
					<ul class="article-list-relationship">
											<li><a href="/regular/item-19961.html" title="正则表达式与HTML5新元素" target="_blank">正则表达式与HTML5新元素</a>
						</li>
											<li><a href="/regular/item-19960.html" title="正则表达式日常收集整理(简单且实用)" target="_blank">正则表达式日常收集整理(简单且实用)</a>
						</li>
											<li><a href="/regular/item-19959.html" title="在实际例子中学习正则表达式(高效率)" target="_blank">在实际例子中学习正则表达式(高效率)</a>
						</li>
											<li><a href="/regular/item-19958.html" title="常用正则表达式匹配代码介绍" target="_blank">常用正则表达式匹配代码介绍</a>
						</li>
											<li><a href="/regular/item-19957.html" title="教你轻松记住JS正则表达式" target="_blank">教你轻松记住JS正则表达式</a>
						</li>
											<li><a href="/regular/item-19956.html" title="PHP正则表达式抓取某个标签的特定属性值的方法" target="_blank">PHP正则表达式抓取某个标签的特定属性值的方法</a>
						</li>
											<li><a href="/regular/item-19955.html" title="正则表达式常用用法汇总" target="_blank">正则表达式常用用法汇总</a>
						</li>
											<li><a href="/regular/item-19954.html" title="jQuery如何用正则表达式验证手机号、身份证号、中文名称" target="_blank">jQuery如何用正则表达式验证手机号、身份证号、中文名称</a>
						</li>
											<li><a href="/regular/item-19953.html" title="python 正则表达式学习小结" target="_blank">python 正则表达式学习小结</a>
						</li>
											<li><a href="/regular/item-19952.html" title="java正则表达式四种常用的处理方式(匹配、分割、替代、获取)" target="_blank">java正则表达式四种常用的处理方式(匹配、分割、替代、获取)</a>
						</li>
											<li><a href="/regular/item-19948.html" title="正则表达式性能优化方法(高效正则表达式书写)" target="_blank">正则表达式性能优化方法(高效正则表达式书写)</a>
						</li>
											<li><a href="/regular/item-19949.html" title="正则表达式、分组、子匹配(子模式)、非捕获子匹配(子模式)" target="_blank">正则表达式、分组、子匹配(子模式)、非捕获子匹配(子模式)</a>
						</li>
											<li><a href="/regular/item-19950.html" title="使用正则表达式 exec 获取字符串中的汉字" target="_blank">使用正则表达式 exec 获取字符串中的汉字</a>
						</li>
											<li><a href="/regular/item-19951.html" title="正则表达式单行、多行模式简介(使用说明)" target="_blank">正则表达式单行、多行模式简介(使用说明)</a>
						</li>
											<li><a href="/regular/item-19947.html" title="详解表单验证正则表达式实例(推荐)" target="_blank">详解表单验证正则表达式实例(推荐)</a>
						</li>
											<li><a href="/regular/item-19944.html" title="JavaScript 中的正则表达式(推荐)" target="_blank">JavaScript 中的正则表达式(推荐)</a>
						</li>
											<li><a href="/regular/item-19945.html" title="JavaScript正则表达式上之基本语法(推荐)" target="_blank">JavaScript正则表达式上之基本语法(推荐)</a>
						</li>
											<li><a href="/regular/item-19946.html" title="JavaScript正则表达式下之相关方法" target="_blank">JavaScript正则表达式下之相关方法</a>
						</li>
											<li><a href="/regular/item-19942.html" title="正则表达式 运算符优先级介绍" target="_blank">正则表达式 运算符优先级介绍</a>
						</li>
											<li><a href="/regular/item-19943.html" title="正则表达式——匹配规则介绍" target="_blank">正则表达式——匹配规则介绍</a>
						</li>
										</ul>
				</div>	
			</div>
		</div>
		<div class="sidebar">
			<!--广告 start-->
			<div class="qf-ads"><ul class="qf-ads-nUl-9"><li><a href="https://www.aliyun.com/activity/new/index?userCode=6qkxlezw" target="_blank"><img src="/uploads/images/ads/202306/20230609231605989299.jpg"></a><a href="https://www.aliyun.com/activity/new/index?userCode=6qkxlezw" target="_blank" class="alink"><label>广告</label><span>商业广告,理性选择</span></a></li></ul></div>
			<div class="qf-cms-name">
				<h3>文章分类</h3>
			</div>
			<div class="qf-cms-container">
				<div class="qf-category-list">
									<a href="/php/index.html" title="PHP编程" target="_blank">PHP编程</a>
									<a href="/regular/index.html" title="正则表达式" target="_blank">正则表达式</a>
									<a href="/javascript/index.html" title="JavaScript" target="_blank">JavaScript</a>
									<a href="/css/index.html" title="CSS/HTML" target="_blank">CSS/HTML</a>
									<a href="/rss/index.html" title="XML/RSS" target="_blank">XML/RSS</a>
									<a href="/ajax/index.html" title="AJAX相关" target="_blank">AJAX相关</a>
									<a href="/programming/hacker/index.html" title="黑客相关" target="_blank">黑客相关</a>
									<a href="/programming/other/index.html" title="相关技巧" target="_blank">相关技巧</a>
								</div>
			</div>
			<div class="qf-cms-name">
				<h3>热门关键词</h3>
			</div>
			<div class="qf-cms-container">
				<div class="qf-tag-list">
									<a href="https://zhannei.baidu.com/cse/site?q=雪佛兰&cc=fuphp.cn&ie=utf-8" title="雪佛兰" target="_blank">雪佛兰</a>
									<a href="https://zhannei.baidu.com/cse/site?q=通用&cc=fuphp.cn&ie=utf-8" title="通用" target="_blank">通用</a>
									<a href="https://zhannei.baidu.com/cse/site?q=奢华&cc=fuphp.cn&ie=utf-8" title="奢华" target="_blank">奢华</a>
									<a href="https://zhannei.baidu.com/cse/site?q=劳斯莱斯&cc=fuphp.cn&ie=utf-8" title="劳斯莱斯" target="_blank">劳斯莱斯</a>
									<a href="https://zhannei.baidu.com/cse/site?q=旗舰版&cc=fuphp.cn&ie=utf-8" title="旗舰版" target="_blank">旗舰版</a>
									<a href="https://zhannei.baidu.com/cse/site?q=64位&cc=fuphp.cn&ie=utf-8" title="64位" target="_blank">64位</a>
									<a href="https://zhannei.baidu.com/cse/site?q=收藏夹&cc=fuphp.cn&ie=utf-8" title="收藏夹" target="_blank">收藏夹</a>
									<a href="https://zhannei.baidu.com/cse/site?q=解调器&cc=fuphp.cn&ie=utf-8" title="解调器" target="_blank">解调器</a>
									<a href="https://zhannei.baidu.com/cse/site?q=网卡&cc=fuphp.cn&ie=utf-8" title="网卡" target="_blank">网卡</a>
									<a href="https://zhannei.baidu.com/cse/site?q=网线&cc=fuphp.cn&ie=utf-8" title="网线" target="_blank">网线</a>
									<a href="https://zhannei.baidu.com/cse/site?q=分辨率&cc=fuphp.cn&ie=utf-8" title="分辨率" target="_blank">分辨率</a>
									<a href="https://zhannei.baidu.com/cse/site?q=家电&cc=fuphp.cn&ie=utf-8" title="家电" target="_blank">家电</a>
									<a href="https://zhannei.baidu.com/cse/site?q=4k&cc=fuphp.cn&ie=utf-8" title="4k" target="_blank">4k</a>
									<a href="https://zhannei.baidu.com/cse/site?q=显示器&cc=fuphp.cn&ie=utf-8" title="显示器" target="_blank">显示器</a>
									<a href="https://zhannei.baidu.com/cse/site?q=header&cc=fuphp.cn&ie=utf-8" title="header" target="_blank">header</a>
									<a href="https://zhannei.baidu.com/cse/site?q=USER_AGENT&cc=fuphp.cn&ie=utf-8" title="USER_AGENT" target="_blank">USER_AGENT</a>
									<a href="https://zhannei.baidu.com/cse/site?q=色彩&cc=fuphp.cn&ie=utf-8" title="色彩" target="_blank">色彩</a>
									<a href="https://zhannei.baidu.com/cse/site?q=图形&cc=fuphp.cn&ie=utf-8" title="图形" target="_blank">图形</a>
									<a href="https://zhannei.baidu.com/cse/site?q=商业&cc=fuphp.cn&ie=utf-8" title="商业" target="_blank">商业</a>
									<a href="https://zhannei.baidu.com/cse/site?q=生成&cc=fuphp.cn&ie=utf-8" title="生成" target="_blank">生成</a>
					
				</div>
			</div>
			<!--广告 start-->
			<div class="qf-ads"><ul class="qf-ads-nUl-10"><li><a href="https://www.aliyun.com/activity/new/index?userCode=6qkxlezw" target="_blank"><img src="/uploads/images/ads/202306/20230609231537994005.jpg"></a><a href="https://www.aliyun.com/activity/new/index?userCode=6qkxlezw" target="_blank" class="alink"><label>广告</label><span>商业广告,理性选择</span></a></li></ul></div>
			<div class="qf-cms-name">
				<h3>热门文章</h3>
			</div>
			<div class="qf-cms-container">
				<ul class="qf-article-list">
													<li><em>1</em>
						<a href="/cehua/item-29482.html" title="什么是Meta标签? 哪些Meta标签对搜索引擎SEO优化有作用?" target="_blank">什么是Meta标签? 哪些Meta标签对搜索引擎SEO优化有作用?</a>
					</li>
									<li><em>2</em>
						<a href="/mac/item-22368.html" title="Mac设置VPN来登录youtube等国外网站的步骤" target="_blank">Mac设置VPN来登录youtube等国外网站的步骤</a>
					</li>
									<li><em>3</em>
						<a href="/jingyan/item-20869.html" title="各大搜索引擎登录入口,网站收录入口" target="_blank">各大搜索引擎登录入口,网站收录入口</a>
					</li>
									<li><em>4</em>
						<a href="/qilin/item-30816.html" title="Openvpn在麒麟操作系统上的配置方法" target="_blank">Openvpn在麒麟操作系统上的配置方法</a>
					</li>
									<li><em>5</em>
						<a href="/bios/item-23598.html" title="联想笔记本BIOS设置图解中文详细说明" target="_blank">联想笔记本BIOS设置图解中文详细说明</a>
					</li>
									<li><em>6</em>
						<a href="/bios/item-27940.html" title="AMI BIOS设置图解教程+Award Bios设置全程图解" target="_blank">AMI BIOS设置图解教程+Award Bios设置全程图解</a>
					</li>
									<li><em>7</em>
						<a href="/mac/item-23040.html" title="Mac怎么切换主显示器 苹果电脑Mac双显示器设置主显方法图解" target="_blank">Mac怎么切换主显示器 苹果电脑Mac双显示器设置主显方法图解</a>
					</li>
									<li><em>8</em>
						<a href="/yunying/other/item-29261.html" title="分享最受美国人喜欢的十大搜索引擎" target="_blank">分享最受美国人喜欢的十大搜索引擎</a>
					</li>
									<li><em>9</em>
						<a href="/tools/item-30528.html" title="分享10个常见的SQL注入工具" target="_blank">分享10个常见的SQL注入工具</a>
					</li>
									<li><em>10</em>
						<a href="/mac/item-23628.html" title="mac系统中自带的邮件程序怎么添加qq邮箱帐号?" target="_blank">mac系统中自带的邮件程序怎么添加qq邮箱帐号?</a>
					</li>
								</ul>
			</div>
			<div class="qf-cms-name">
				<h3>最新更新</h3>
			</div>
			<div class="qf-cms-container">
				<ul class="qf-article-list">
													<li><a href="/changshi/item-79334.html" title="无线路由器经常断线 故障解决" target="_blank">无线路由器经常断线 故障解决</a>
					</li>
									<li><a href="/changshi/item-79351.html" title="怎么在Mac上设置锁屏不待机" target="_blank">怎么在Mac上设置锁屏不待机</a>
					</li>
									<li><a href="/changshi/item-79354.html" title="VHD和VHDX硬盘格式有什么区别?" target="_blank">VHD和VHDX硬盘格式有什么区别?</a>
					</li>
									<li><a href="/changshi/item-79363.html" title="关闭Aero Shake节约系统资源的方法" target="_blank">关闭Aero Shake节约系统资源的方法</a>
					</li>
									<li><a href="/changshi/item-79362.html" title="怎么更改Mac中的邮件字体大小" target="_blank">怎么更改Mac中的邮件字体大小</a>
					</li>
									<li><a href="/changshi/item-79371.html" title="提高WIN7系统开机速度方法分享" target="_blank">提高WIN7系统开机速度方法分享</a>
					</li>
									<li><a href="/changshi/item-79361.html" title="Mac系统怎么更改用户登录密码" target="_blank">Mac系统怎么更改用户登录密码</a>
					</li>
									<li><a href="/changshi/item-79358.html" title="Mac上如何修改时间和日期" target="_blank">Mac上如何修改时间和日期</a>
					</li>
									<li><a href="/changshi/item-79366.html" title="如何将常用应用固定至开始屏幕或任务栏" target="_blank">如何将常用应用固定至开始屏幕或任务栏</a>
					</li>
									<li><a href="/mysql/item-79372.html" title="MySQL中replace into语句的用法详解(insert into 的增强版)" target="_blank">MySQL中replace into语句的用法详解(insert into 的增强版)</a>
					</li>
								</ul>
			</div>
			<!--广告 start-->
			<div class="qf-ads qf-ads-ontop"><ul class="qf-ads-nUl-11"><li><a href="http://www.hnqfu.cn" target="_blank"><img src="/uploads/images/ads/202306/20230610081510415263.jpg"></a><a href="http://www.hnqfu.cn" target="_blank" class="alink"><label>广告</label><span>商业广告,理性选择</span></a></li></ul></div>
		</div>
	</div>
</div>

<script type="text/javascript">
var scrollPh = 1680;
layui.use('code', function(){
	layui.code({
		elem: 'pre',
		title: '代码',
		encode: false,
		ln: true,
		//skin: 'dark',
		//about: '123',
		about: [
			//'<a href="javascript:;">复制</a>'
		]
	});
});
</script>

<div class="wrap bottom">
	<div class="wrapper clearfix">
		<div class="links">
			<a href="http://www.fuphp.cn">网站首页</a>
							 | <a href="/aboutus.html">关于我们</a>
							 | <a href="/wangzhanshengming.html">免责声明</a>
							 | <a href="/guanggaohezuo.html">广告合作</a>
							 | <a href="/contact.html">联系我们</a>
					</div>
		<div class="copyright">
			Copyright @ 2015-2024 <a href="" title="河南全福网络科技有限公司专业网制设计制作,PHP二次开发">福编程 fuphp</a> All Rights Reserved.
		</div>
		<div class="copyright">
			<a href="http://beian.miit.gov.cn" target="_blank" rel="nofollow">豫ICP备15036959号-4</a>
		</div>
    </div>
</div>

<script type="text/javascript">
layui.config({
	base: '/static/js/layuiadmin/' //静态资源所在路径
}).extend({
	qf: '../qfplus/qf/qf',
	contact: '../qfplus/contact/contact',
}).use(['contact'], function(){
	var contact = layui.contact;
	contact.render({'position':	'left', 'oappend':'.qf-quick-bar'});
	//菜单
	jQuery(".submenu").slide({ 
		type:"menu",// 效果类型,针对菜单/导航而引入的参数(默认slide)
		titCell:".nLi", //鼠标触发对象
		targetCell:".sub", //titCell里面包含的要显示/消失的对象
		titOnClassName:'current',
		effect:"slideDown", //targetCell下拉效果
		delayTime:300 , //效果时间
		triggerTime:0, //鼠标延迟触发时间(默认150)
		returnDefault:true //鼠标移走后返回默认状态,例如默认频道是“预告片”,鼠标移走后会返回“预告片”(默认false)
	});
	//表单
	var form = layui.form;
	form.render(null, 'component-form');
	/* 监听提交 */
	form.on('submit(component-form-submit)', function(data){
		var searchkey = data.field.searchkey;
		return true;
	});
	//滚动固顶
	$(document).scroll(function(){
		var sTop = $(document).scrollTop();
		if( sTop >= scrollPh ){
			$('.qf-ads-ontop').css({'position':'fixed', 'top':'0'});
		}else{
			$('.qf-ads-ontop').css({'position':'relative'});
		}
	});
});
<!--百度统计------------------>
</script>
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?9eb8fd7c57fefc4283caaf6d0c7e37f7";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>

</body>
</html>