• C#解析HTML神器 Html Agility Pack


    曾经,我傻乎乎的用正则表达式成功的解析了学校的新闻网、教务管理系统、图书馆管理系统中我想要的所有的内容。那时候废了好大的劲写那正则啊,而且最后还是各种不给力,经常会有意想不到的bug出现,最后经过无数次修复才基本可以正常使用。但是还是很不爽的。后来看见别人用这个东西解析HTML,就感觉很强大,今天自己动手尝试了一下,当时几天的代码,用这个类库几分钟就搞定了。废话不多说,进入主题。

    Html Agility Pack主页:http://htmlagilitypack.codeplex.com/

    作者主页:http://zhoufoxcn.blog.51cto.com/792419/595344/

    使用类库第一步:引用类库;

    第二步:加载HTML文件:支持本地文件,也可以利用类库提供的document.LoadHtml()方法来加载远程的资源

    第三步:获得根节点:

    HtmlNode rootNode = document.DocumentNode;
    

    第三步:在根节点下面要找你找的内容,这个我没有全部做尝试,下面是我做的一些测试代码,解析的是网易的新闻页;

     HtmlDocument document=new HtmlDocument();
                document.Load(@"E:c.htm", Encoding.Default);
                HtmlNode rootNode = document.DocumentNode;
                HtmlNode titleNode = rootNode.SelectSingleNode("//h1[@id='h1title']");
                Console.WriteLine("-------------------------标题-------------------------------");
                Console.WriteLine(titleNode.InnerHtml);
                Console.WriteLine("-------------------------时间-------------------------------");
                HtmlNode timeNode = rootNode.SelectSingleNode("//div[@class='ep-info cDGray']/div[@class='left']");
                Console.WriteLine(timeNode.InnerHtml);
                Console.WriteLine("-------------------------正文-------------------------------");
                HtmlNode newsNode = rootNode.SelectSingleNode("//div[@class='end-text']");
                Console.WriteLine(newsNode.InnerHtml);
    Console.ReadKey();
    

    官方的文档告诉我们,可以使用如下的方法来获得根节点下面的一个或者多个子节点:

     /Articles/Article[1]:选取属于Articles子元素的第一个Article元素。 
     /Articles/Article[last()]:选取属于Articles子元素的最后一个Article元素。 
     /Articles/Article[last()-1]:选取属于Articles子元素的倒数第二个Article元素。 
     /Articles/Article[position()<3]:选取最前面的两个属于 bookstore 元素的子元素的Article元素。 
     //title[@lang]:选取所有拥有名为lang的属性的title元素。 
     //CreateAt[@type='zh-cn']:选取所有CreateAt元素,且这些元素拥有值为zh-cn的type属性。 
     /Articles/Article[Order>2]:选取Articles元素的所有Article元素,且其中的Order元素的值须大于2。 
     /Articles/Article[Order<3]/Title:选取Articles元素中的Article元素的所有Title元素,且其中的Order元素的值须小于3。

     下面列出了最有用的路径表达式:
     nodename:选取此节点的所有子节点。 
     /:从根节点选取。 
     //:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 
     .:选取当前节点。 
     ..:选取当前节点的父节点

  • 相关阅读:
    由类型名得到该类型
    TypeName of CA1505 is AvoidUnmaintainableCode, not AvoidUnmantainableCode.
    多核
    SSRS throws "The operation has timed out."
    XmlRootAttribute与XmlTypeAttribute
    littleendian and bigendian
    Assembly Exp
    如何在Ubuntu 11.10下成功安装Java [转载]
    *uck up ~,纯发泄
    [转载]读书相关,,
  • 原文地址:https://www.cnblogs.com/baiyunchen/p/3931439.html
Copyright © 2020-2023  润新知