Парсинг данных с сайта - 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
}