近段时间在论坛上面兴起了一股正则之风,不论做什么都喜欢用正则 你在后台解析json格式字符串,必须要用正则,好吧,你可能不知道用 JavaScriptSerializer类, 你解析类似www.xxx.com?a=a1&b=b2&c=c3的querystring参数,必须用正则,好吧,你也可能不知道string.split方法 你解析html你还必须用正则,好吧,这就真没有必要了,因为在解析html用到正则的时候你很多时候就不得不用到平衡组,你很有可能卡在这里 正则的强大性与通用性就不提了,一般的处理完全够用了,你完全可以自己去“系统”的学习(注:系统学习正则),在配上RegexBuddy或者在线的正则(注:附注会提到内容)的工具就可以掌握一些常用的用法 但是去解析html,还是用专业的库去解析吧,虽然条条大路通罗马,你真没必要以铁人三项的精神去做用正则死嗑html。 其实解析html的库有满多不错的,如 HtmlAgilityPack , 又或者 Jumony , 以及Java的解析库htmlparser(有.net版的),下面列一个小例子: 地址:http://feedback./ws/eBayISAPI.dll?ViewFeedback2&ftab=AllFeedback&userid=paragad&iid=-1&de=off&items=25&interval=0&mPg=151
抓取评论区的:回复内容,购买人名字,购买时间 引用:HtmlAgilityPack库
using System; using System.Collections.Generic; using System.Linq; using System.Text; using HtmlAgilityPack; namespace AnaHtml { class Program { static void Main(string[] args) { HtmlWeb html = new HtmlWeb(); var content = from page in html.Load("http://feedback./ws/eBayISAPI.dll?ViewFeedback2&ftab=AllFeedback&userid=paragad&iid=-1&de=off&items=25&interval=0&mPg=151") //Skip(1)排除标题行 where((x,index)=>index%2==0)选取相应的内容行 .DocumentNode.SelectSingleNode("//table[@class='FbOuterYukon']").Elements("tr").Skip(1).Where((x, index) => index % 2 == 0) let row = page where row != null select new { Content = row.ChildNodes[1].InnerText, //注意,任何时候的SelectSingleNode方法都是以整个document为前提的,个人觉得应该当前的节点为前担 Id =row.ChildNodes[2].SelectSingleNode(row.ChildNodes[2].XPath+"//div[1]//a[1]//span[1]").InnerHtml, Retime = row.ChildNodes[3].InnerText }; foreach (var item in content) { Console.WriteLine("\r\n Content:{0} Id={1} Time={2} ", item.Content, item.Id,item.Retime); } Console.Read(); } } } 整个结构清晰自然,利用Xpath的来进行选取相当方便,轻易就可以抓取内容。 附注: 一,正则相关 2.正则达人的博客 二,解析库:
XPath简明介绍
<? xml version = "1.0" encoding = "utf-8" ?> < Articles > < Article > < Title > 在ASP.NET中使用Highcharts js图表 </ title > < Url > http://zhoufoxcn.blog.51cto.com/792419/537324 </ Url > < CreateAt type = "en" > 2011-04-07 </ price > </ Article > < Article > < Title lang = "eng" > Log4Net使用详解(续) </ title > < Url > http://blog.csdn.net/zhoufoxcn/archive/2010/11/23/6029021.aspx </ Url > < CreateAt type = "zh-cn" > 2010年11月23日 </ price > </ Article > < Article > < Title > J2ME开发的一般步骤 </ title > < Url > http://blog.csdn.net/zhoufoxcn/archive/2011/06/12/6540223.aspx </ Url > < CreateAt type = "zh-cn" > 2011年06月12日 </ price > </ Article > < Article >
针对上面的XML文件,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
转自=> 周公博客 |
|