如何从网站上的表中检索数据

本文关键字:检索 数据 网站 | 更新日期: 2023-09-27 18:36:41

我做了一个WinForms应用程序,它可以从网站上的表格中获取一个名称列表。我目前正在使用网络浏览器和计时器。我认为这可以更顺利、更快地完成。Web浏览器工作缓慢(内置的旧Internet Explorer浏览器),有时无法获取数据,我必须再次运行计时器。

所以我有一个列表框(应该包含名称)。列表框称为玩家列表。然后我有一个按钮,它激活计时器来抓取数据。这是我的计时器代码。

private void UpdatePlayers_Tick(object sender, EventArgs e)
        {
            PlayerList.Items.Clear();
            if (this.Tibia.ReadyState == WebBrowserReadyState.Complete)
            {
                foreach (HtmlElement cell in this.Tibia.Document.GetElementsByTagName("tr"))
                {
                    string cls = cell.GetAttribute("className");
                    if (cls.StartsWith("Odd"))
                    {
                        dynamic oldname = cell.InnerText;
                        string[] strings = oldname.Split('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
                        string charnameonly = strings[0];
                        this.PlayerList.Items.Add(charnameonly);
                    }
                    else if (cls.StartsWith("Even"))
                    {
                        dynamic oldname = cell.InnerText;
                        string[] strings = oldname.Split('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
                        string charnameonly = strings[0];
                        this.PlayerList.Items.Add(charnameonly);
                    }
                }
            }
        } 

想知道是否有人可以帮助我实现这一目标,而无需WebBrowser或类似的东西。一些代码示例会非常好。

注意:我只想要球员的名字。这是我从中获取数据的网站: http://www.tibia.com/community/?subtopic=worlds&world=Antica

如何从网站上的表中检索数据

您可以使用

HtmlAgilityPack

var players = await GetPlayers();

async Task<List<List<string>>> GetPlayers()
{
    string url = "http://www.tibia.com/community/?subtopic=worlds&world=Antica";
    using (var client = new HttpClient())
    {
        var html = await client.GetStringAsync(url);
        var doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(html);
        var table = doc.DocumentNode.SelectSingleNode("//table[@class='Table2']");
        return table.Descendants("tr")
                    .Skip(2)
                    .Select(tr => tr.Descendants("td")
                                    .Select(td => WebUtility.HtmlDecode(td.InnerText))
                                    .ToList())
                    .ToList();
    }
}

使用硒。 它主要是为测试而设计的,在报废数据方面甚至更好。从经验上讲。