正则表达式 网页内容筛选网页数据

如何通过正则表达式筛选html内的信息? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。3被浏览240分享邀请回答0添加评论分享收藏感谢收起写回答1 个回答被折叠()16:58 提问
js中如何通过正则表达式提取出一个网页中的a标签
js中如何通过正则表达式提取出一个网页中的a标签??
const reg = '&a href="(.+?)"&(.+?)&/a&';
const result = response.data.match(reg);
在上面代码中,我通过response.data获取到网页中的数据,然后通过正则表达式reg去匹配,但是result中的结果,不是我想要的,我想把所有的a标签存到一个数组中,这怎么做??
###怎么把匹配到的所有数据存到result数组中
按赞数排序
reg = '.*'
var res = /^&[a]{1} .*&.*&\/a&?/; 这样就可以拿到所有的a标签
希望可以帮到你
var reg="^&[a]{1}.*&.*&\/a&?$",这条可以
觉得表达不是很清晰,你要匹配到a标签中的什么数据保存进数组,还是说把整个a标签添加进数组?
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐利用正则表达式抓取博客园列表数据
转载 &更新时间:日 10:04:08 & 作者:baidixing
这篇文章主要介绍了利用正则表达式抓取博客园列表数据的相关资料,需要的朋友可以参考下
鉴于我在要完成的asp.net MVC 3 仿照博客园企业系统要用到测试数据,我自己输入太累,所以我就抓取了博客园的部分列表数据,还请dudu不要见怪。
在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间。
现在我就来把我抓取博客园数据的过程叙述一下,如果有朋友有更好的意见,欢迎提出来。
要使用正则表达式抓取数据,首先就要创建一个正则表达式进行匹配,我推荐使用regulator,这个正则表达式工具,我们可以先使用这个工具把我们要使用的正则表达式拼接出来,然后在程序中使用。
我发现博客园的首页列表可以通过...这种方式来直接访问,这样我们就可以直接通过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)
WebRequest webRequest = WebRequest.Create(strUrl);
WebResponse webResponse = webRequest.GetResponse();
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
string result = reader.ReadToEnd();
catch (Exception 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[].V//获取到的是列表数据的标题
string content = match.Groups[].V//获取到的是内容
string linkurl=match.Groups[].V//获取到的是链接到的地址
Insert(title, content,linkurl);//执行插入到数据库的操作
4.通过上面的代码我们可以很轻松的从博客园中获取我们用来测试的数据,方便快捷,而且真实,比我们手动输入的速度要快很多。
正则表达式其实不应该算是一种语言,只能算是一种语法,因为任何的语言包括C#,javascript等语言都对正则表达式有很好的支持,只是他们的使用语法稍有不同,其实只要我们可以正确的拼接出正则表达式,那么我们抓取任何网站的内容都可以很轻松的做到。前一段我试着抓取了淘宝的数据,一共抓取了有几百万条,我想应该还有很多没有抓取到,不得不佩服淘宝,数据量太大。
回到我们使用的C#语言上,其实对正则表达式也有着非常好的支持,Regex就是用来对正则表达式进行操作的类,所有的对正则表达式的操作都在这个类中。
如果你对正则表达式还不是太熟悉,网上有一篇正则表达式30分钟入门教程,大家可以参考一下,写的很不错。再加上使用一个正则表达式工具,相信可以抓取到任何你想的内容。
在拼接正则表达式的时候,可能会花费很长时间,毕竟要分析html结构,从中抓取内容。希望大家可以沉住气,因为只要正则表达式拼接正确,那么一定可以抓取正确的内容。
为了避免大家说只说不做,那么我就把我抓取的博客园首页内容秀一下,因为博客园首页数据会有更新,所以大家可以看到这些数据都是在博客园中顺序存在的。
博客园每页列表是20条,一共200页,所以一共是4000条。数据抓取正确。
我以前说过,只是会代码的程序员不一定是合格程序员,程序员应该尽可能的减少自己的工作量,因为我们都是高智商的人。所以我们应该积极的学习各种对我们的工作有帮助的框架或者是方法,比如IOC、Entity Framework或Nhibernate框架来减轻我们开发维护代码的负担,毕竟我们听到需求要更改的反映,一般都是愤怒,然后大骂,最后才是修改。有些框架能够帮助我们,给我们维护代码带来好心情,何乐而不为呢。
我最后说一句,因为我要开发一个简单的仿照博客园的网站(MVC3),所以会用到各种技术准备,我提前写出来把这些要用到的内容整理一下,为以后的开发加速。
下一次,我准备整理一下在MVC中使用文本编辑器KindEditor的方法,希望大家如果有好的意见或者资料可以提供一下,让我也增加一些见识。谢谢各位
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具你的位置:
取网页元素文本,再用正则表达式过滤
22:43:43 |
来源: 按键精灵资源站
本帖最后由 卡柏藤 于
22:56 编辑
代码如下:
PID = Plugin.Web.Bind(&wqm.exe&)
Txt=Plugin.Web.HtmlGet(&text&,&tag:P&txt:&)
MessageBox Txt
Plugin.Super_Regex.Create &20\d*.*\d*完成&,0& && &(创建正则表达式,0不区分大小写)
MessageBox Plugin.Super_Regex.SearchAll(Txt)& && && &(搜索全部,返回结果数量为1个)
MessageBox&&Plugin.Super_Regex.GetMatchText (1,Txt)& &&&(返回第一个搜索结果)
网页元素返回的文本Txt为:
话说十几年前,那时的老徐头可不简单,是镇上的第一批的百万富翁,还花钱搞上了个镇上的挂名副镇长2012.1完成。
问题来了,返回的命中数量是1个,但是返回的匹配内容为:,这是毛玩意,,,而且每次还是不同的9位数,不应该是 2012.1完成 吗??
后经多方走访,据说是网站编码的问题,查了一下网站编码为GBK,是编码问题吗,若果是,有何良策,或者是我代码有错,劳请各方大神帮忙参谋参谋。{:4_89:}{:4_89:}{:4_89:}筛选HTML页面以获取某类值的正则表达式
[问题点数:26分,结帖人LJP_PGM]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:219637
2013年 荣获名人称号
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年11月 总版技术专家分月排行榜第一
本版专家分:0
结帖率 100%
本版专家分:0
结帖率 100%
本版专家分:0
结帖率 100%
匿名用户不能发表回复!|
CSDN今日推荐

我要回帖

更多关于 正则表达式抓取网页 的文章

 

随机推荐