Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 28.08.2011
Сообщений: 29

Как пропарсить HTML?

26.10.2011, 22:09. Показов 1320. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На странице есть несколько ссылок, которые нужно вытащить, все они в:

C#
1
2
3
<div class="data">
    <div class="title">
<a class="title" href="link_который надо вытащить">sometext</a>
Как правильно реализовать? Много материала перерыл по парсингу HTML, так и не понял...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2011, 22:09
Ответы с готовыми решениями:

Как пропарсить путь к файлу
Нужно пропарсить путь и вытащить путь к файлу &lt;div id=&quot;profile_avatar&quot;&gt;&lt;img src=&quot;путь к файлу&quot;...

Как пропарсить html файл?
У меня такой вопрос. Как в скрипте php реализовать выборку текста из html файла заключенного в коментарии. Ну к примеру: ... ... ...

Как пропарсить XML?
Добрый День или Ночи. Есть вот такой XML &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;&lt;INFO name=&quot;&quot;&gt; ...

9
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
26.10.2011, 22:40
По тому куску кода который вы привели как то так
C#
1
2
3
4
5
6
7
HtmlElementCollection html=  webBrowser1.Document.GetElementsByTagName("a");
           foreach (HtmlElement elem in html)
           {
               if (elem.InnerText == "sometext")
                 Console.WriteLine(elem.GetAttribute("href"));
 
           }
0
 Аватар для Etrimus
399 / 366 / 54
Регистрация: 23.05.2010
Сообщений: 716
27.10.2011, 07:11
Есть хорошая бесплатная библиотека для обработки HTML, называется htmlagilitypack.
1
2 / 2 / 0
Регистрация: 28.08.2011
Сообщений: 29
27.10.2011, 10:52  [ТС]
Vitall,
C#
1
if (elem.InnerText == "sometext")
sometext не статичный текст, для каждой ссылки он разный.

Etrimus, пробовал, не смог разобраться с парсингом через эту библиотеку, нигде толкового мануала не нашел...
1
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
27.10.2011, 12:18
Если убрать условие с текстом "sometext" то будут выводиться все ссылки
C#
1
2
3
4
5
HtmlElementCollection html=  webBrowser1.Document.GetElementsByTagName("a");
           foreach (HtmlElement elem in html)
           {
              Console.WriteLine(elem.GetAttribute("href"));
           }
1
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
27.10.2011, 13:23
если все нужные ссылки находятся в <div class="data"><div class="title"> как указано в первом посте
то в htmlagilitypack это будет выглядеть как
C#
1
2
3
4
5
6
7
8
9
10
11
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml("you html string");
 
            var nodes = doc.DocumentNode.SelectNodes("//div[@class='data']/div[@class='title']/a");
            foreach (var node in nodes)
            {
                if (node.Attributes.Contains("href"))
                {
                    Console.WriteLine(node.Attributes["href"]);
                }
            }
сам по себе htmlagilitypack прост как валенок, в мануалах нечего писать про него
единственное что нужно знать это XPath
2
2 / 2 / 0
Регистрация: 28.08.2011
Сообщений: 29
27.10.2011, 13:44  [ТС]
m0nax,
C#
1
2
System.NullReferenceException не обработано
  Message=В экземпляре объекта не задана ссылка на объект.
Когда доходит до
C#
1
foreach (var node in nodes)
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
27.10.2011, 14:17
я же сказал для какого случая это - если нужны ссылки находящиеся в таких конструкциях
HTML5
1
2
3
4
5
<div class="data">
    <div class="title">
        <a href="some ref">ffff</a>
    </div>
</div>
предполагается что они есть на странице, если nodes == null значит таких вообще нету

если нужны просто ссылки независимо от их расположения на странице то
C#
1
 var nodes = doc.DocumentNode.SelectNodes("//a");
1
2 / 2 / 0
Регистрация: 28.08.2011
Сообщений: 29
27.10.2011, 14:54  [ТС]
Понял в чем проблема предыдущего кода - за ночь на сайте верстка сменилась
Теперь работает, спасибо за пример работы с HtmlAgilityPack, понял хоть что к чему

Только в
C#
1
Console.WriteLine(node.Attributes["href"]);
нужно дописать
C#
1
Console.WriteLine(node.Attributes["href"].Value);
чтобы значение ссылки вытащить.
0
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
12.12.2011, 14:51
а как быть тут прочтите последний мой пост

Здорово друг, спасибо большое!.
Грамотно получилось!
Закоментированный код выполняет обновление документа?
Можно сделать чтоб выводилось без пустых строк и столбцов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2011, 14:51
Помогаю со студенческими работами здесь

Как пропарсить XML файл?
Никогда не имел с этим дело, немного ознакомился. Насколько я понял, я могу с помощью парсинга достать некоторую информацию с конкретных...

TWebBrowser: Выводит как обычную страницу, а возможно ли ее пропарсить?
т.е. пропарсить так, как она есть, без тегов и все-го такого, только текст, который параллельно допустим в мемо выводится? Т.е. фактически...

Как пропарсить домен с самого начала и до последней ссылки?
Как пропарсить домен с самого начала и до последней ссылки? к примеру http://site.ru/index.php http://site.ru/index1.php ...

Как пропарсить строку типа "43/12"
как пропарсить строку типа &quot;43/12&quot;, причем 43 и 12 интовые поля, а / - charовское.

Нужно пропарсить
Пишу программу на php, все работает, кроме вывода токена, никак не могу его пропарсить Получаю строчку такого вида ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 19.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru