C#解析html文档

转载 2015年11月17日 17:59:04

当我们需要解析一个web页面的时候,如果非常简单,可以用字符串查找的方式,复杂一点可以用正则表达式,但是有时候正则很麻烦的,因为html代码本身就比较麻烦,像常用的img标签,这个东东到了浏览器上就没了闭合标签(一直还没搞懂为什么),想用XML解析,也是同样的原因根本解析不了,今天发现一个解析html控件,用了一下,非常好用。

这个控件叫做Html Agility Pack,主页在这儿:http://htmlagilitypack.codeplex.com/

这儿还有一篇blog介绍怎么使用的 (English):http://olussier.net/2010/03/30/easily-parse-html-documents-in-csharp/

我直接把例子贴这儿,一看就明白。因为是作为xml解析的,所以呢,少不了XPath,如果不懂这个东西的话,赶紧看看吧,现在xpath语法都扩展到css里面了,语法比较简单,先看看基础的就行了。

最基本的使用方法不是SelectSingleNode,而是GetElementById,这是与XmlDocument不同的地方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// The HtmlWeb class is a utility class to get the HTML over HTTP
HtmlWeb htmlWeb = new HtmlWeb();
  
// Creates an HtmlDocument object from an URL
HtmlAgilityPack.HtmlDocument document = htmlWeb.Load("http://www.somewebsite.com");
  
// Targets a specific node
HtmlNode someNode = document.GetElementbyId("mynode");
  
// If there is no node with that Id, someNode will be null
if (someNode != null)
{
  // Extracts all links within that node
  IEnumerable<htmlnode> allLinks = someNode.Descendants("a");
  
  // Outputs the href for external links
  foreach (HtmlNode link in allLinks)
  {
    // Checks whether the link contains an HREF attribute
    if (link.Attributes.Contains("href"))
    {
      // Simple check: if the href begins with "http://", prints it out
      if (link.Attributes["href"].Value.StartsWith("http://"))
        Console.WriteLine(link.Attributes["href"].Value);
    }
  }
}</htmlnode>

使用xpath

1
2
3
4
5
6
// Extracts all links under a specific node that have an href that begins with "http://"
HtmlNodeCollection allLinks = document.DocumentNode.SelectNodes("//*[@id='mynode']//a[starts-with(@href,'http://')]");
  
// Outputs the href for external links
foreach (HtmlNode link in allLinks)
    Console.WriteLine(link.Attributes["href"].Value);

One more

1
2
3
4
xpath = "//table[@id='1' or @id='2' or @id='3']//a[@onmousedown]";
xpath = "//ul[@id='wg0']//li[position()<4]/h3/a";
xpath = "//div[@class='resitem' and position()<4]/a";
xpath = "//li[@class='result' and position()<4]/a";

C#对HTML文档的解析

相信很多人都有过HTML文档解析的需求。比如我们抓取了某1个网站的页面数据,格式就是HTML的格式。以前我们都是通过正则表达式来进行解析,但是发现有一些问题。解析HTML文档时并不容易,如果文档的格式...
  • guwei4037
  • guwei4037
  • 2013年12月29日 21:29
  • 9688

C# HTML解析工具HtmlAgilityPack使用实例(二)--Web页面

一、使用XPath精确解析指定的Dom节点 XPath字符串的简单获取方法,是在浏览器开发者工具中指定节点右键》“Copy XPath” 如图 //加载Web 的页面并解析内容 stri...
  • u011127019
  • u011127019
  • 2016年09月30日 16:40
  • 2280

C#,xml、html节点数据解析

C#,xml、html节点数据解析
  • scimence
  • scimence
  • 2015年12月12日 13:36
  • 1247

C#解析html源码的框架类HtmlAgilityPack

常常在c#的winform程序中会加载html源码,并解析其中的内容,比较好的解析工具就是HtmlAgilityPackPM> Install-Package HtmlAgilityPack...
  • cctvcqupt
  • cctvcqupt
  • 2015年08月15日 22:45
  • 355

使用HtmlParser解析HTML (C#版)

本文介绍了.net 版的一个HTMLParser网页解析开源类库(Winista.HTMLParser)的功能特性、工作原理和使用方法。对于使用.net进行Web信息提取的开发人员进行了一次HTMLP...
  • cdefg198
  • cdefg198
  • 2012年09月21日 14:44
  • 8741

C# HTML解析工具HtmlAgilityPack使用实例(一)

一、生成HTML字符串 //生成DOM字符串结构 HtmlNode container = HtmlNode.CreateNode(""); HtmlNode title = HtmlNode.Cr...
  • u011127019
  • u011127019
  • 2016年09月30日 16:32
  • 2418

解析html 生成word文档

工具: jsoup+itext 解析html标签 public class HtmlToStringUtils { public static List htmlStringToList(Stri...
  • ITrookieGe
  • ITrookieGe
  • 2015年11月21日 11:24
  • 348

Dom解析Html文档中的元素

Dom解析Html文档中的元素一、理论Dom我们并不陌生,之前我写过一篇XML的解析方法,里面有一种解析方法叫Dom4j,其实Dom4j和Dom的区别就是版本高了点、功能更强了一点,其实本质是一样的,...
  • hongmeikaile
  • hongmeikaile
  • 2011年03月17日 07:53
  • 5460

jsoup 解析HTML 文档

官网 http://jsoup.org/   jsoup简介 http://baike.baidu.com/view/4066913.htm
  • ty0415
  • ty0415
  • 2012年10月10日 13:07
  • 348

用htmlparser解析html文档

htmlparser,下载地址:http://htmlparser.sourceforge.net/。
  • lidujun1028
  • lidujun1028
  • 2014年08月22日 12:21
  • 249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#解析html文档
举报原因:
原因补充:

(最多只允许输入30个字)