Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732

Распарсить HTML страницу

05.09.2014, 10:56. Показов 3995. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрям!

На форме будут размещен элемент webBrowser и через него буду открывать страницу.
Код страницы выглядит так:
HTML5
1
2
3
4
<tr>
                    <td style="width:190px;">Сокращенное наименование:</td>
                    <td>ЗАО " А.Р.Т. "</td>
                </tr>
Мне надо получить, например, вот этот текст ЗАО " А.Р.Т. ".
Помогите, пожалуйста с кодом.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.09.2014, 10:56
Ответы с готовыми решениями:

Распарсить HTML-страницу
например я Напишу страницу в техбох1 а при нажатие на кнопки спарсить он должен загрузить себе весь код страницы а потом выбрать все...

Распарсить полученую html страницу
ссылка: http://soft.softodrom.ru/ap/Traffic-Inspector-p4360 Написал метод получить ее html код: public string Get_Html(string...

Распарсить локальную HTML-страницу
Привет ! Я вот только начинаю знакомство с языком C#.. Хочу спросить у вас, с помощью каких операций и классов лучше реализовать следующие...

34
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
11.09.2014, 09:31  [ТС]
Студворк — интернет-сервис помощи студентам
Подскажите еще, пожалуйста, как взять значение перед искомым текстом?
HTML5
1
2
3
Выручка от продажи (за минусом НДС, акцизов ...)</td><td style="white-space:nowrap;">3*553*000</td><td style="white-space:nowrap;">13*693*000</td><td style="white-space:nowrap;">20*612*000</td>
    </tr><tr class="TableColoredItemBackColor TableFontSize TableHorizontalPadding TableVerticalAlignMiddle" align="right">
        <td align="left">Валовая прибыль</td>
Как получить значение 20 612 000, т.к. оно является последнем в строке таблицы? Цифра располагается перед
HTML5
1
<td align="left">Валовая прибыль</td>
Или есть другой способ дойти до конца строки таблицы?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.09.2014, 16:35
>([\d|\*]*)</td>\n
как-то так
0
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
17.09.2014, 09:15  [ТС]
xoraxax, не находит.
C#
1
2
3
4
            string text14 = "Кредиторская задолженность</td><td style=";
            var credit = str.IndexOf(text14);
            var credits = Regex.Match(str.Substring(credit), ">([0-9]*)</td>\n");
            CREDIT.Text = (credits.Groups[1].ToString());
У меня программа ругается на
C#
1
\d
, а при установке @ перед "" вообще ничего не ищет.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.09.2014, 10:31
Вы бы разобрались с простыми регулярками - не сложно же.
http://regex101.com/ - сюда зайдите и посмотрите, что происходит - там описание справа есть.
1
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
17.09.2014, 13:06  [ТС]
xoraxax, дело пошло веселее

Добавлено через 40 минут
Подскажите, как в эту конструкцию вставить условие:
если значение не найдено, то FILIAL.Text = "Данных нет"

C#
1
2
3
4
5
//Филиалы
string text6 = "Филиалы (источник: ЕГРЮЛ)";
var filial = str.IndexOf(text6);
var filials = Regex.Match(str.Substring(filial), @"\<td\salign=""left""\>(.*)<\/td>\n");
FILIAL.Text = (filials.Groups[1].ToString());
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
17.09.2014, 13:18
Kir@,
Смотрите на Match.Success
0
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
24.09.2014, 15:10  [ТС]
Как прекратить поиск на определенном слове?

Добавлено через 21 минуту
И еще int конвертировать в string c разделение на тысячи?
т.е. было:
12345678
стало:
12 345 678

Maskedtextbox не предлагать.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
24.09.2014, 15:53
Первый вопрос не понял.
Второй можно так:
C
1
String.Format("{0:0,0}", 123451231316547).Replace(","," ")
Скорее всего можно как-то еще.
1
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
24.09.2014, 16:30  [ТС]
xoraxax, по первому: у меня две идентичные таблицы, которые отличаются только заголовками. Мне надо осуществить поиск от названия первой таблиц ДО названия второй таблицы.

Добавлено через 5 минут
Но тут несколько "но":
1. второй таблицы может и не быть.
2. первая может быть произвольного размера, поэтому задать длину символом после искомого слова не могу.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
24.09.2014, 17:27
наверно проще вытащить все что находится между первым и вторым словом, а потом уже к этому применять запрос.
Что-то типа.
(?:слово1)(.*?)(?:слово2|$)
1
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
02.10.2014, 08:39  [ТС]
Еще вопрос. Вот код:

Кликните здесь для просмотра всего текста
HTML5
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
<table class="TableFontFamily TableBorder" width="100%" rules="all"  style="border-collapse:collapse;" border="1" cellspacing="0" >
                        <tr class="TableHeaderBackColor TableHeaderFontSize TableAllAroundPadding" style="text-align: center">
                            <td>Местонахождение</td>
                            <td style="width:200px;">Телефон</td>
                            <td style="width:100px;">Тип подразделения</td>
                        </tr>
                
                    <tr class="TableColoredItemBackColor TableFontSize TableHorizontalPadding TableVerticalAlignMiddle">
                        <td align="left">031 АЗЕРБАЙДЖАН г. Баку, ул. Джафара Джаббарлы, д. 44</td>
                        <td align="left"></td>
                        <td align="center">представительство</td>
                    </tr>
                
                    <tr class="TableItemBackColor TableFontSize TableHorizontalPadding TableVerticalAlignMiddle">
                        <td align="left">420107, Респ Татарстан, г Казань, ул ПЕТЕРБУРГСКАЯ, 50</td>
                        <td align="left"></td>
                        <td align="center">представительство</td>
                    </tr>
                
                    <tr class="TableColoredItemBackColor TableFontSize TableHorizontalPadding TableVerticalAlignMiddle">
                        <td align="left">860 УЗБЕКИСТАН г. Ташкент, ул. Амира Тимура, д. 107-Б</td>
                        <td align="left"></td>
                        <td align="center">представительство</td>
                    </tr>
                
                    </table>


Как оно выглядит - см. вложение.

Как посчитать количество филиалов?
Миниатюры
Распарсить HTML страницу  
0
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
02.10.2014, 09:12  [ТС]
И еще вопрос
Кликните здесь для просмотра всего текста
HTML5
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
44
45
46
47
    Участие в уставном капитале (источник: Росстат)  
</h1>
 
<table class="CompanyInformationPadding" width="98%" border="0" cellpadding="0" cellspacing="0">
    
        <tr valign="top">
            <td>
                
                    <table width="100%" border="0" cellpadding="1" cellspacing="0">
                        <tr>
                            <td style="font-family:Tahoma; font-size: 10px; color:#000000; text-align:right; white-space:nowrap;">
                                Дата обновления в С: 12.08.2014
                            </td>
                        </tr>
                    </table>
                    
                            <table class="TableFontFamily TableBorder" width="100%" rules="all"  style="border-collapse:collapse;" border="1" cellspacing="0" >
                                <tr class="TableHeaderBackColor TableHeaderFontSize TableAllAroundPadding" style="text-align: center">
                                    <td style="width:30%;">Наименование</td>
                                    <td style="width:30%;">Местонахождение</td>
                                    <td style="width:20%;">Доля в УК, руб</td>
                                    <td>Доля в УК, %</td>
                                    <td style="width:1%;">ИДО</td>
                                </tr>
                        
                            <tr class="TableColoredItemBackColor TableFontSize TableHorizontalPadding TableVerticalAlignMiddle">
                                <td>АЙ-НОВУС, ООО</td>
                                <td>г. Москва, </td>
                                <td style="text-align:right;">3 </td>
                                <td style="text-align:right;">10</td>
                                <td style="white-space: nowrap">
                                    <img id="ctl14_SubsidiariesRepeater_ctl01_ctl00_IndexImage" title=" риск" src="/img/ring_red.png" align="middle" style="border-width:0px;height:16px;width:16px;" />
77
                              </td>
                            </tr>
                        
                            <tr class="TableItemBackColor TableFontSize TableHorizontalPadding TableVerticalAlignMiddle">
                                <td>ВИТТЕ КОНСАЛТИНГ, ООО</td>
                                <td>г. Москва, ул. Никитская </td>
                                <td style="text-align:right;">10</td>
                                <td style="text-align:right;">10</td>
                                <td style="white-space: nowrap">
                                    <img id="ctl14_SubsidiariesRepeater_ctl02_ctl00_IndexImage" title="риск" src="/img/ring_green.png" align="middle" style="border-width:0px;height:16px;width:16px;" />
2
                              </td>
                            </tr>
                            </table>


Составил выражение (пардоньте, что на js, но суть от этого не меняется):

Кликните здесь для просмотра всего текста
JavaScript
1
.*ИДО\<\/td\>\s+\<\/tr\>\s+[\<\>a-zA-Z\s+\=\"]*([А-Яф-я\-\s+]*)\,\s+([А-Я]*)\<\/td\>\s+\<td\>([\s+А-Яа-я\.\,\/\d+]*)\<\/td\>\s+.*\s+.*\>(\d+)[\s+\<\>a-zA-Z\/\=\"\-\:\d+\_\.\;Высокий риск Средний Низкий]*\<td\>([А-Яф-я\s+\-]*)\,\s+([А-Я]*)\<\/td\>\s+\<td\>([\s+А-Яа-я\.\,\/\d+]*)\<\/td\>\s+.*\s+.*\>(\d+)[\s+\<\>a-zA-Z\/\=\"\-\:\d+\_\.\;Высокий риск Средний Низкий]*\<td\>


Строк в таблице может быть очень много.
Как в цикл (до достижения тега </table>) вставить этот код?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
02.10.2014, 10:21
первый - ищите ItemBackColor, смотрите количество Matches.
Второй возможно понял неправильно:
Достаньте все куски <tr></tr>, потом внутри этих кусков ищите нужные данные.
А вообще где-то есть html Agility Pack, или как-то так, специально вроде для этого сделана.
0
 Аватар для Kir@
90 / 58 / 7
Регистрация: 07.02.2010
Сообщений: 732
02.10.2014, 10:46  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
первый - ищите ItemBackColor, смотрите количество Matches.
Мне бы кодом помочь

html Agility Pack - уже поздно, мне осталось 2 таблицы.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
02.10.2014, 12:37
Из ФАКа
matches = optionRegex.Matches(text);
В результате в matches появляются все результаты парсинга. Мы можем посмотреть сколько их (matches.Count), можем узнать значение конкретного элемента (matches[N].Value)
pattern – образец или условие для поиска, например, если необходимо найти слово“не” в строке “не может быть”, то pattern для поискабудет выглядеть так: @"не". В простейшем случае, можно обойтись без условия поиска, тогда найдено будет значение точно повторяющее pattern. Можно получить как значение найденного совпадения так и их количество, как видно из примера ниже.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2014, 12:37

HTml Agility Pack: распарсить страницу
Три дня не могу распарсить таблицу списка файлов на сайте rutracker.org. Помогите, мне нужно данные с таблицы добавить в свой datagrid.

Html Agility Pack: распарсить страницу
Имеется HTML код &lt;tr&gt; &lt;td class=&quot;&quot;&gt; Побед: &lt;/td&gt; &lt;td class=&quot;td-number-nowidth&quot;&gt;...

Распарсить страницу через Html Agility Pack
Имеется страница с разметкой такого Типа : &lt;span id='1_46' class='tree1_1' onclick=&quot;collapse('1_46','2_46')&quot;;&gt;ФАКТОРЫ...

Составление регулярных выражений. Распарсить HTML-страницу
Всем доброго времени суток! Этой темы касаюсь впервые, а так как опыта программирования мало никак не могу самостоятельно понять, поэтому...

Распарсить HTML страницу для получения теста между тегами
Собственно проблема заключается в том что не получается спарсить текст между тэгов, пробовал все возможные способы. Есть html код: ...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru