HTMLAgilityPack C#获取所有节点和子节点

HTMLAgilityPack C#获取所有节点和子节点,c#,html-agility-pack,C#,Html Agility Pack,我正试图从这个网页上刮取一些数据,但在这样做时遇到了一些问题。我只想获得3个节点数据,1个用于团队名称,1个用于积分,1个用于位置。因此,控制台输出的示例与此类似: Uta 23.52中心 Uta 29.22大前锋 Uta 29.86控卫 Uta 26.22小前锋 Uta 26.61得分后卫 我设计了下面的代码,但是foreach循环复制了数据,似乎将每个值分配到每个位置,分配到每个点等等。任何帮助都将不胜感激 private void button1_Click(object sender,

我正试图从这个网页上刮取一些数据,但在这样做时遇到了一些问题。我只想获得3个节点数据,1个用于团队名称,1个用于积分,1个用于位置。因此,控制台输出的示例与此类似:

Uta 23.52中心
Uta 29.22大前锋
Uta 29.86控卫
Uta 26.22小前锋
Uta 26.61得分后卫

我设计了下面的代码,但是foreach循环复制了数据,似乎将每个值分配到每个位置,分配到每个点等等。任何帮助都将不胜感激

 private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            var doc = new HtmlWeb().Load("https://www.sportingcharts.com/nba/defense-vs-position/");
            HtmlAgilityPack.HtmlNodeCollection teams = doc.DocumentNode.SelectNodes("//div[@class='col col-md-3']//tr/td[2]");
            HtmlAgilityPack.HtmlNodeCollection points = doc.DocumentNode.SelectNodes(".//div[@class='col col-md-3']//tr/td[3]");
            HtmlAgilityPack.HtmlNodeCollection positions = doc.DocumentNode.SelectNodes(".//div[@class='col col-md-3']//span[1]");

            List<Record> lstRecords = new List<Record>();
            foreach (HtmlAgilityPack.HtmlNode teamnode in teams)
            {
                foreach (HtmlAgilityPack.HtmlNode pointsnode in points)
                {
                    foreach (HtmlAgilityPack.HtmlNode positionnode in positions)

                        Console.WriteLine(teamnode.InnerText + ' ' + pointsnode.InnerText + ' ' + positionnode.InnerText);

                }


            }
        }
        catch { }

    }
private void按钮1\u单击(对象发送者,事件参数e)
{
尝试
{
var doc=new HtmlWeb().Load(“https://www.sportingcharts.com/nba/defense-vs-position/");
HtmlAgilityPack.HtmlNodeCollection teams=doc.DocumentNode.SelectNodes(“//div[@class='col-md-3']//tr/td[2]”);
HtmlAgilityPack.HtmlNodeCollection points=doc.DocumentNode.SelectNodes(“.//div[@class='col-md-3']//tr/td[3]”);
HtmlAgilityPack.HtmlNodeCollection positions=doc.DocumentNode.SelectNodes(“.//div[@class='col-md-3']///span[1]”);
列表记录=新列表();
foreach(团队中的HtmlAgilityPack.HtmlNode teamnode)
{
foreach(HtmlAgilityPack.HtmlNode pointsnode in points)
{
foreach(HtmlAgilityPack.HtmlNode positionnode in positions)
Console.WriteLine(teamnode.InnerText+''+pointsnode.InnerText+''+positionnode.InnerText);
}
}
}
捕获{}
}

你的主要问题是foreach的方法,你告诉你的代码是针对每个团队的,给我所有的分数,每个分数给我所有的位置。 由于团队积分和积分是相同的,我的方法将在for中完成,其中比较棘手的是位置,但是你知道,每个位置只有30行

    var doc = new HtmlWeb().Load("https://www.sportingcharts.com/nba/defense-vs-position/");
    HtmlAgilityPack.HtmlNodeCollection teams = doc.DocumentNode.SelectNodes("//div[@class='col col-md-3']//tr/td[2]");
    HtmlAgilityPack.HtmlNodeCollection points = doc.DocumentNode.SelectNodes(".//div[@class='col col-md-3']//tr/td[3]");
    HtmlAgilityPack.HtmlNodeCollection positions = doc.DocumentNode.SelectNodes(".//div[@class='col col-md-3']//span[1]");

    string[] positions_aux = positions.Where(x => x.InnerText.Length >= 6).Select(y => y.InnerText).ToArray();

    for (int i = 0; i < teams.Count - 1; i++)
    {
        var aux = i / 30;
        Console.WriteLine(teams[i].InnerText + ' ' + points[i].InnerText + ' ' + positions_aux[aux]);
    }
var doc=new HtmlWeb().Load(“https://www.sportingcharts.com/nba/defense-vs-position/");
HtmlAgilityPack.HtmlNodeCollection teams=doc.DocumentNode.SelectNodes(“//div[@class='col-md-3']//tr/td[2]”);
HtmlAgilityPack.HtmlNodeCollection points=doc.DocumentNode.SelectNodes(“.//div[@class='col-md-3']//tr/td[3]”);
HtmlAgilityPack.HtmlNodeCollection positions=doc.DocumentNode.SelectNodes(“.//div[@class='col-md-3']///span[1]”);
字符串[]positions_aux=positions.Where(x=>x.InnerText.Length>=6)。选择(y=>y.InnerText.ToArray();
对于(inti=0;i