Rookie Engineer

If you aren't the kind of person that feels this way naturally, you'll need to become one in order to make it as a hacker. Otherwise you'll find your hacking energy is sapped by distractions like sex, money, and social approval.

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  24 Posts :: 0 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

Html Agility Pack ── 一个解析HTML的工具

.NET 框架类库本身没有提供工具分析HTML,以前常用的做法是用正则表达式,或者浏览器控件,或者MSHTML组件,甚至SgmlReader。SgmlReader可以将HTML转化成XML,然后你就可以使用System.Xml命名空间下的类对文件进行查询。

CodePlex上有一个Html Agility Pack项目,是原生的.NET项目,不依赖MSHTML或者ActiveX/COM 对象。其中的HtmlDocument可以加载任何HTML文件(即使该文件是不well-formed的HTML),然后允许你使用类似于System.Xml的对象模型对文件进行查询。

官网地址:www.codeplex.com/htmlagilitypack

例如: 

HtmlWeb webClient = new HtmlWeb(); 
HtmlDocument doc = webClient.Load("file.htm");
HtmlNodeCollection nodes = doc.DocumentElement.SelectNodes("/html[1]/body[1]/div")
 
foreach(HtmlNode node in nodes)
 {
      Console.WriteLine(node.InnerText.Trim());
 }
 doc = null;
 webClient = null;
 nodes = null; 

Q: 如何选择HTML结点?

//根据层次结构 因为HTML具阶层性(Hierarchy)
HtmlNode node1 = doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[1]/div[2]/div[7]/div[1]/div[3]/ol[1]/li[1]/div[1]/div[2]/address");
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("/html[1]/body[1]/div[1]/div[2]/div[3]/div[2]/div[1]/div[1]/div[1]/div");
//根据ID

HtmlNode node2 = doc.DocumentNode.SelectSingleNode("//p[@id='prop_detail_qt_prop_1' ");

几个比较有用的连接:

1. 开源项目Html Agility Pack实现快速解析Html

2. Pack ── 一个分析HTML的工具

3. HTML解析利器HtmlAgilityPack

4. c#蜘蛛程序之HTML解析利器HtmlAgilityPack

5. 开源项目Html Agility Pack实现快速解析Html

6. 一款很不错的html转xml工具-Html Agility Pack


posted on 2011-11-15 23:10 micwu 阅读(1093) 评论(1)  编辑 收藏 引用 所属分类: Tool

Feedback

# re: [Tool]HtmlAgilityPack 一个解析Html的工具 2014-04-08 21:49 IT工作生活这点事
.Net解析html文档类库HtmlAgilityPack完整使用说明--采集软件开发尤其好用 - 项目实战 - IT工作生活这点事。Just Such So!
http://www.suchso.com/projecteactual/netpausehtmldocumentclasslibHtmlAgilityPackcaiji.html  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理