using Aspose.Html; using System; using System.Collections.Concurrent; using System.Linq; using System.Threading; namespace Day02 { class Program { static void Main(string[] args) { var cities = new ConcurrentBag(); var wait = new ManualResetEvent(false); Console.WriteLine("Started"); // Parse for html doc var htmlDocument = new HTMLDocument(); htmlDocument.OnLoad += (sender, e) => { var doc = (HTMLDocument)sender; var htmlTables = htmlDocument.DocumentElement.GetElementsByTagName("table"); if (htmlTables.Count() > 0) { var rows = htmlTables[0].GetElementsByTagName("tr"); for (int i = 1; i < rows.Length; i++) { var cells = rows[i].GetElementsByTagName("td"); var city = new City { Rank = Convert.ToInt32(cells[0].TextContent), CityName = cells[1].TextContent, Country = cells[2].TextContent, Popuplation = Convert.ToDouble(cells[3].TextContent.Replace(",", "")) }; cities.Add(city); } wait.Set(); }; }; htmlDocument.Navigate("https://www.worldatlas.com/citypops.htm"); wait.WaitOne(); foreach (var city in cities) { Console.WriteLine($"{city.Rank} {city.CityName} {city.Country} {city.Popuplation}"); } } } }