簡體   English   中英

HTMLAgilityPack C#獲取所有節點和子節點

[英]HTMLAgilityPack C# Get all nodes and subnodes

我正在嘗試從該網頁上抓取一些數據,並且在操作時遇到了一些麻煩。 我只想獲取3個節點數據,其中1個用於團隊名稱,1個用於積分,1個用於位置。 因此,控制台輸出的示例將類似於以下內容:

猶他州23.52中心
Uta 29.22大前鋒
UT 29.86控球后衛
UT 26.22小前鋒
尤塔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 { }

    }

您的主要問題是使用foreach的方法,您要告訴您的代碼是針對每個團隊的,給我所有的分數,為每一點給我的所有職位 由於團隊的得分和得分是相同的,因此我的方法將采用相同的方法進行處理,但要注意的是,這些問題很棘手,但同樣,您知道每個職位只有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]);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM