如何利用正規表示式抓取部落格園的清單數據
这次给大家带来用利用正则表达式抓取博客园的列表数据,怎样利用正则表达式抓取博客园的列表数据?用正则表达式抓取博客园的列表数据的注意事项有哪些,下面就是实战案例,一起来看一下。
鉴于我在要完成的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); } /// <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条。数据抓取正确。
我以前说过,只是会代码的程序员不一定是合格程序员,程序员应该尽可能的减少自己的工作量,因为我们都是高智商的人。所以我们应该积极的学习各种对我们的工作有帮助的框架或者是方法,比如IOC、Entity Framework或Nhibernate框架来减轻我们开发维护代码的负担,毕竟我们听到需求要更改的反映,一般都是愤怒,然后大骂,最后才是修改。有些框架能够帮助我们,给我们维护代码带来好心情,何乐而不为呢。
我最后说一句,因为我要开发一个简单的仿照博客园的网站(MVC3),所以会用到各种技术准备,我提前写出来把这些要用到的内容整理一下,为以后的开发加速。
下一次,我准备整理一下在MVC中使用文本编辑器KindEditor的方法,希望大家如果有好的意见或者资料可以提供一下,让我也增加一些见识。谢谢各位
相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
相關閱讀:
以上是如何利用正規表示式抓取部落格園的清單數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Scrapy是一個基於Python的爬蟲框架,可以快速且方便地獲取網路上的相關資訊。在本篇文章中,我們將透過Scrapy案例來詳細解析如何抓取LinkedIn上的公司資訊。確定目標URL首先,我們需要明確我們的目標是LinkedIn上的公司資訊。因此,我們需要找到LinkedIn公司資訊頁面的URL。開啟LinkedIn網站,在搜尋框中輸入公司名稱,在

Golang正規表示式使用管道符|來匹配多個單字或字串,將各個選項作為邏輯OR表達式分隔開來。例如:匹配"fox"或"dog":fox|dog匹配"quick"、"brown"或"lazy":(quick|brown|lazy)匹配"Go"、"Python"或"Java":Go|Python |Java匹配字或4位郵遞區號:([a-zA

PHP正規表示式是一種針對文字處理和轉換的強大工具。它可以透過解析文字內容,並依照特定的模式進行替換或截取,達到有效管理文字資訊的目的。其中,正規表示式的一個常見應用是替換以特定字元開頭的字串,對此,我們進行如下的講解

Instagram是目前最受歡迎的社群媒體之一,擁有數億的活躍用戶。其中用戶上傳了數十億的圖片和視頻,這些數據對於許多企業和個人來說都是非常有價值的。因此,在許多情況下,需要使用程式自動抓取Instagram資料。本文將介紹如何使用PHP實現Instagram資料的抓取,並提供實作範例。安裝PHP的cURL擴充cURL是一個用於在各種

php用正規去除中文的方法:1、建立一個php範例檔;2、定義一個含有中文和英文的字串;3、透過「preg_replace('/([\x80-\xff]*)/i', '',$a);」正規方法去除查詢結果中的中文字元即可。

在本文中,我們將學習如何使用PHP正規表示式刪除HTML標籤,並從HTML字串中提取純文字內容。為了示範如何去除HTML標記,讓我們先定義一個包含HTML標籤的字串。

知乎作為一個極受歡迎的知識分享社區,其上眾多用戶貢獻了大量高品質的問題和回答,對於學習和工作的人來說,這些內容對於解決問題和拓展視野非常有幫助。如果想要整理和利用這些內容,就需要使用抓取程式來取得相關資料。本文將介紹使用PHP編寫抓取知乎問題及回答的程式。簡介知乎是一個內容非常豐富的平台,其上的內容包括但不限於問題、答案、專欄、主題、使用者等。我們可以通

網站安全性越來越受到關注,使用HTTPS協議保證資料傳輸的安全性已成為目前網站開發的重要內容。在PHP開發中,如何使用正規表示式驗證URL是否為HTTPS協定呢?下面我們就來了解一下。正規表示式正規表示式是一種用來描述規律的表達式,是處理文字的強大工具,被廣泛應用於文字匹配、搜尋和替換等方面。在PHP開發中,我們可以透過正規表示式來匹配URL中的http
