使用HTMLAgilityPack到数据表的C#节点集合

时间:2018-10-23 20:54:27

标签: c# datagridview datatable

我正在尝试从该站点抓取数据。我可以获取数据,但是现在我需要将所选数据添加到数据表中。以下内容即将完成,但仅返回最后一条记录。我知道它很简单,但无法弄清楚。基本上,在说完之后,for循环中Console.Writeline部分的注释掉的部分将是datagridview中所需的结果。

    private void button1_Click(object sender, EventArgs e)
    {
        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]");

        DataTable dvp_dt = new DataTable();
        dvp_dt.Columns.Add("Team", typeof(string));
        dvp_dt.Columns.Add("Points", typeof(string));
        dvp_dt.Columns.Add("Position", typeof(string));

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


        DataRow row = dvp_dt.NewRow();

        for (int i = 0; i < teams.Count - 1; i++)
        {
            var aux = i / 30;
            row["Team"] = (teams[i].InnerText);
            row["Points"] = (points[i].InnerText);
            row["Position"] = (positions_aux[aux]);
           // Console.WriteLine(teams[i].InnerText + ' ' + points[i].InnerText + ' ' + positions_aux[aux]);
        }


         dvp_dt.Rows.Add(row);
        dataGridView2.DataSource = dvp_dt;
    }

1 个答案:

答案 0 :(得分:1)

尝试以下操作:

for (int i = 0; i < teams.Count - 1; i++)
{
    DataRow row = dvp_dt.NewRow();
    var aux = i / 30;
    row["Team"] = (teams[i].InnerText);
    row["Points"] = (points[i].InnerText);
    row["Position"] = (positions_aux[aux]);
}

dataGridView2.DataSource = null;        
dataGridView2.DataSource = dvp_dt;