С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
2 / 2 / 3
Регистрация: 21.05.2014
Сообщений: 13

Парсинг данных с сайта

18.09.2015, 14:40. Показов 4489. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работаю с HTML Agility Pack. Нужно считать данные с таблицы сайта.
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
 
        }

Но вот проблема, в переменной doc просматриваю HTML код который программа загружает, в этом коде отсутсвует элемент <tbody> таблицы, а именно в этом блоке хранятся данные, которые мне нужны. Как получить данные из этого блока. До <thead></thead> добрался, заголовки парсит без проблем.

Загружаю HTML код так:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 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;
            }
        }


с парсингом сталкиваюсь впервые, оч хочу понять что и как.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2015, 14:40
Ответы с готовыми решениями:

Парсинг данных с сайта
Добрый вечер, есть проблема : Мне надо парсить количество поставленных денег на каждую из команд на на данном сайте (del). Дело в...

Парсинг данных с сайта
Помогите пожалуйста составить регулярное выражение для задания : (Определить количество книг по жанрам на произвольном сайте библиотеки или...

Парсинг данных с сайта с javascript
Есть сайт с некими данными (раз в день обновляемыми, потому и нужна программа), данные выдаются примерно следующим образом: 1....

2
2 / 2 / 3
Регистрация: 21.05.2014
Сообщений: 13
18.09.2015, 14:45  [ТС]
Вот html код с сайта и который загружаю в программе, это нормально, что блок <tbody> отсутствует? Если да то почему и как тогда обращаться к данным, которые внутри этого блока.
Миниатюры
Парсинг данных с сайта   Парсинг данных с сайта  
0
2 / 2 / 3
Регистрация: 21.05.2014
Сообщений: 13
24.09.2015, 21:38  [ТС]
Разобрался! tbody отсутсвует из-за того, что таблица формируется при помощи ajax. В этом случае на форму нужно загрузить webBrowser, запустить в нем нужный сайт, а затем на основе того что он загрузил рабоать с данными с помощью HAP (html agility pack):

Загрузка сайта в webBrowser
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public Form1()
        {
            InitializeComponent();
            webBrowser1.Visible = false;
            LoadUrl();        
        }
 
 private void LoadUrl()
        {
            richTextBox1.Visible = false;
            pictureBox1.Visible = true;
 
            //Создание ссылки
            Uri uri = new Uri(URL);
 
            //запуск браузера
            webBrowser1.AllowNavigation = true;
            webBrowser1.ScriptErrorsSuppressed = true;
 
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowserControl_DocumentCompleted);
            webBrowser1.Navigate(uri);
        }



Считываем HTML из webBrowser
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  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
           }


Надеюсь кому-нибудь поможет.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2015, 21:38
Помогаю со студенческими работами здесь

Парсинг данных с сайта или страницы сайта
Здравствуйте, добрые люди! Есть задача спарсить данные с страницы соц сети. Или просто со страницы с помощью js. На пхп не предлагать....

Парсинг данных с сайта
Ребят помогите спарсить данные с https://www.marathonbet.ru/su/betting/11?periodGroupAllEvents=2 нужно спарсить все матчи в массив только...

Парсинг данных с сайта
Есть удаленный сервер, тобиш сайт, на нем стоит рейтинг серверов. Мне нужно спарсить все сервера имеющиеся в рейтинге и если добавится...

Парсинг данных с сайта
Здравствуйте, при парсинге данных с сайте, где указаны фамилии по-русски в Powershell получается ерунда, прикладываю скриншот и код. Я...

Парсинг данных с сайта
Всем привет, хочу сделать парсинг новостей с сайта, с использованием jsoup. Информация парсится, но парсится всё а не только ссылка и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru