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文档时并不容易,如果文档的格式...

C# 将Word文档转换为HTML

日常生活中,我们总是在Word中进行文字的编辑,它不仅能够保存Text文本,还可以保存文本的格式等等。那么如果我要将一Word文档上的内容展示在网页上,该怎么做呢?这里我提供了一个小工具,你可以将Wo...

(c#) Word文档的上传,保存,检索内容文字,转化成HTML 及(在检索 COM 类工厂 错误 80070005 解决方案)

下面实现的是由页面上传一个word文档,然后把该文档保存到工程目录的文件夹UploadWord下. 在页面上可以实现搜索word文档里里面是否含有某些文字内容,同时可以把Word文件转化为HTMl页面...

c#作业第三期(将excel数据写入html文档)

咳咳,先看下效果: 这是读取excel时,我把它显示在datagirdview上: 其实,我应该打上马赛克的。。。 放大窗体吧。。。 显示出来了。。。各位别误会,这不是SQL读取出来的,读取的...

C#操作Word总结(三)——表格处理、把Word文档转化成为HTML

表格处理(插入表格、设置格式、填充内容、表格中加图片)       #region 表格处理(插入表格、设置格式、填充内容) /// /// 表格处理 /// /// word文件名 /// ...

c# css html Jvascript json 帮助文档

  • 2017年12月01日 19:01
  • 48.7MB
  • 下载

使用 XPath 解析 HTML 文档

原文 http://funhacks.net/2016/05/08/使用XPath解析HTML文档/ XPath 的全称是 XML Path Language,即 XML 路径语言,它是一种在结...

Jsoup解析HTML实例及文档方法详解

这篇文章主要介绍了Jsoup如何解析一个HTML文档、从文件加载文档、从URL加载Document等方法,对Jsoup常用方法做了详细讲解,最近提供了一个示例供大家参考使用DOM方法来遍历一个文档从元...

python解析html提取数据,并生成word文档

今天试着用ptyhon抓取一下网页上的
  • how8586
  • how8586
  • 2014年09月19日 17:20
  • 10770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#解析html文档
举报原因:
原因补充:

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