• 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:选取此节点的所有子节点。 
     /:从根节点选取。 
     //:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 
     .:选取当前节点。 
     ..:选取当前节点的父节点

  • 相关阅读:
    经济危机下,自主创业已成为一种时代潮流?
    曾靖雯(帮别人名字作诗)
    四大内伤造就80后创业高失败率
    如何让创业的路不再崎岖
    叶莉(帮别人名字作诗)
    谁能够在萧条中生存?历史总是惊人相似的(转)
    哪种书最适合创业者阅读
    中西部崛起 关键是要激发普遍的创业热情
    每日英语:Dating in China Is a Largely Commercial Transaction
    每日英语:Poor Chinese Schools Tell Students: Bring Your Own Desks
  • 原文地址:https://www.cnblogs.com/baiyunchen/p/3931439.html
Copyright © 2020-2023  润新知