C#爬网页内容除了直接调用网页的数据接口,另一种则是直接取得页面的HTML,然后对需要的内容进行获取,这个时候需要对整个页面的HTML进行DOM解析以及操作

.Net下解析HTML文件有很多种选择,个人发现比较好用的是 HtmlAgilityPack (点击可下载)

第一步,引用 HtmlAgilityPack.dll 并且使用它的命名空间名 using HtmlAgilityPack;
然后就是获取页面源码

        HtmlAgilityPack.HtmlDocument htmlDoc = returnhtmlDoc(url);

        // 返回html源代码
        public HtmlAgilityPack.HtmlDocument returnhtmlDoc(string url)//url为页面地址
        {
            HttpWebRequest httpWebRequest = WebRequest.Create(url) as HttpWebRequest;
            HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
            Stream stream = httpWebResponse.GetResponseStream();
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);
            string s = reader.ReadToEnd();
            reader.Close();
            stream.Close();
            httpWebResponse.Close();
            HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(s);
            return htmlDoc;
        }

第二步,获取到内容后就是需要对需要的HTML标签进行内容获取

        //获取div标签 id为content下的所有节点内容
        HtmlNode content_1 = htmlDoc.DocumentNode.SelectNodes("//div[@id='content']");

        //获取span标签 class为content下的第一个节点内容
        HtmlNode content_2 = htmlDoc.DocumentNode.SelectSingleNode("//span[@class='content']");

        //获取div标签 id为content下的span标签 class为text下的a标签节点内容
        HtmlNode content_3 = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='content']//span[@class='text']//a");

        //获取content_1下的HTML内容
        string content_1_text = content_1[0].InnerHtml;

        //获取content_2下的文本内容
        string content_2_text = content_2.InnerText;

        //获取content_3下a标签的href属性内容
        string content_3_text = content_3.Attributes["href"].Value;