关于C# 使用Xpath路径(HtmlAgilityPack)对网页内容查找获取的方法。(程序为.ashx的一般处理程序)

先贴代码:

using System;
using System.Web;
using Newtonsoft.Json;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using HtmlAgilityPack;

namespace Lesson1
{
    /// 
    /// ZZ_SY 的摘要说明
    /// 
    public class ZZ_SY : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";
            string url = context.Request["url"];
            int id = 0;
            
            #region id = 16  http://www.huadanseed.cn/huadan/ProductShow.asp?ID=169    Xpath 路径在每个客户端显示不一样
            if (id == 16)
            {
                string xpath_table = "//tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]"; 
                HtmlNodeCollection node_table = doc.DocumentNode.SelectSingleNode(xpath_table).ChildNodes;

                foreach (var node in node_table)
                {
                    if (node.InnerHtml.IndexOf("品种名称") > 0)
                    {
                        string td = "td[2]";
                        var temp = node.SelectSingleNode(td);
                        temp = temp.SelectSingleNode("p");

                        data.nzname = temp.InnerText.Trim();
                    }

                    if (node.InnerHtml.IndexOf("公司名称") > 0)
                    {

                        string td = "td[2]";
                        var temp = node.SelectSingleNode(td);
                        temp = temp.SelectSingleNode("p");

                        data.sccs = temp.InnerText.Trim();

                    }
                }
            }
            string JsonStr = JsonConvert.SerializeObject(data);
            context.Response.Write(JsonStr);

        }

         public bool IsReusable
        {
            get
            {
                return false;
            }
        }
        public class Entity
        {
            public string nzname;
            public string sccs;
        }
    }
}

主要问题在于 string xpath_table = "//tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]";

根据Postman 得到的 post 网页内容,来分析如何设置 xpath_table

关于C# 使用Xpath路径(HtmlAgilityPack)对网页内容查找获取的方法。(程序为.ashx的一般处理程序)_第1张图片

 

当设置 xpath_table = "//tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]" 时,

HtmlNodeCollection node_table = doc.DocumentNode.SelectSingleNode(xpath_table).ChildNodes;

上述代码中的作用是 获取 ,即

包含的内容, 其中node_table 包含 13个items,其中的 #text 内容在网页上并不可见,只需通过所包含的汉字字符串检测得到所要查找的 那一项   tr  即可。

        关于C# 使用Xpath路径(HtmlAgilityPack)对网页内容查找获取的方法。(程序为.ashx的一般处理程序)_第2张图片

获取存在对应汉字的    tr  后,因为里面包含两个 td  , 因此要加后缀[2],来获得 td[2]  中的内容,即

小杂55

,因为下一目录只存在一个

,其中内容可以通过

var temp = node.SelectSingleNode(td);
data.nzname = temp.InnerText.Trim();

上述两行代码直接获取,作用和源代码类似,(其实就多写了一行代码而已)

你可能感兴趣的:(C#)