Парсинг данных с сайта - C# (190214)
Формулировка задачи:
Работаю с HTML Agility Pack. Нужно считать данные с таблицы сайта.
Но вот проблема, в переменной doc просматриваю HTML код который программа загружает, в этом коде отсутсвует элемент <tbody> таблицы, а именно в этом блоке хранятся данные, которые мне нужны. Как получить данные из этого блока. До <thead></thead> добрался, заголовки парсит без проблем.
Загружаю HTML код так:
с парсингом сталкиваюсь впервые, оч хочу понять что и как.
public Form1() { string url = "http://www.finam.ru/analysis/leaders/"; InitializeComponent(); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(getRequest(url)); HtmlNodeCollection c = doc.DocumentNode.SelectNodes("//th[@name='quote']"); string result = ""; if(c!=null) foreach (var item in c) { result += item.InnerText+Environment.NewLine; } richTextBox1.Text = result; }
public string getRequest(string url) { try { var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.AllowAutoRedirect = false;//Запрещаем автоматический редирект using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { using (var stream = httpWebResponse.GetResponseStream()) { using (var reader = new StreamReader(stream, Encoding.GetEncoding(httpWebResponse.CharacterSet))) { return reader.ReadToEnd(); } } } } catch { return String.Empty; } }
Решение задачи: «Парсинг данных с сайта»
textual
Листинг программы
private void webBrowserControl_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string doc = "<html>"; //--- Загрузка html из браузера --- #region browserLoad HtmlElementCollection SearchTag = webBrowser1.Document.GetElementsByTagName("html"); foreach (HtmlElement item in SearchTag) { doc += item.InnerHtml; } doc += "</html>"; #endregion browserLoad //--- Считываем данные при загрузке --- #region DataLoad HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument(); html.OptionFixNestedTags = true; html.OptionAutoCloseOnEnd = true; html.LoadHtml(doc); HtmlNodeCollection c = html.DocumentNode.SelectNodes("//td[@class='quote']/a"); int k = 1; if (c != null) { foreach (HtmlNode item in c) { richTextBox1.Text += k + ") " + item.InnerHtml + Environment.NewLine; k++; } } if (richTextBox1.Text=="") richTextBox1.Text = "Failed to load data!"; #endregion DataLoad }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д