使用htmlagilitypack在c#中获取html表

c# datagridview html-agility-pack

我开始使用c#,我试图从网站上获取一个表并在datagridview中显示它。我试着先获得前两列,我可以得到数据,但它显示在第二列。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using System.Net;
using HtmlAgilityPack;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        private DataTable dt;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string htmlCode = "";
            using (WebClient client = new WebClient())
            {
                client.Headers.Add(HttpRequestHeader.UserAgent, "AvoidError");
                htmlCode = client.DownloadString("http://www.sismologia.cl/links/ultimos_sismos.html");
            }
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(htmlCode);

            dt = new DataTable();
            dt.Columns.Add("Local", typeof(string));
            dt.Columns.Add("UTC", typeof(string));

            int count = 0;

            foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
            {
                richTextBox1.Text = htmlCode;

                foreach (HtmlNode row in table.SelectNodes("//*[@id=\"main\"]/table//tr"))
                {
                    foreach (var cell in row.SelectNodes("//*[@id=\"main\"]/table//tr//td"))
                    {
                        DataRow dr = dt.NewRow();
                        if ((count % 2 == 0))
                        {
                            dr["Local"] = cell.InnerText.Replace(" ", " ");
                        }
                        else
                        {
                            dr["UTC"] = cell.InnerText.Replace(" ", " ");

                            dt.Rows.Add(dr);
                        }
                        count++;
                    }
                }

                dataGridView1.DataSource = dt;
            }
        }
    }
}

一般承认的答案

解决方案,直接选择main div中的所有tr并循环遍历:

        string htmlCode = "";
        using (WebClient client = new WebClient())
        {
            client.Headers.Add(HttpRequestHeader.UserAgent, "AvoidError");
            htmlCode = client.DownloadString("http://www.sismologia.cl/links/ultimos_sismos.html");
        }
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

        doc.LoadHtml(htmlCode);

        var dt = new DataTable();
        dt.Columns.Add("Local", typeof(string));
        dt.Columns.Add("UTC", typeof(string));

        foreach (var row in doc.DocumentNode.SelectNodes("//*[@id='main']//tr"))
        {
            var nodes = row.SelectNodes("td");
            if (nodes != null)
            {

                var local = nodes[0].InnerText;
                var utc = nodes[1].InnerText;

                dt.Rows.Add(local, utc);
            }
        }



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因