Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141

Выбрать заданный тег и удалить его содержимое

23.08.2022, 20:45. Показов 1451. Ответов 3

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Занимаюсь парсингом одного сайта, использую библиотеку AngleSharp, считала код со страницы, кусок кода прилагается. Предстала такая задача: нужно считать содержимое тега div без содержимого тега table, то есть типо игнорировать данный тег. Как-то можно так сделать? Подскажите пожалуйста

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div  itemprop='administrationRoute'>
&emsp;Внутрь. Таблетки рекомендуется запивать стаканом воды.
<br>&emsp;Взрослым. 10 мг (1 табл.) 1 раз в сутки. 
<br>&emsp;Отдельные группы пациентов.
<br>&emsp;Пациенты пожилого возраста. Нет необходимости в снижении дозировки у пожилых пациентов, если функция почек не нарушена.
<br>&emsp;Таблица 1.
<br>&emsp;Дозирование у взрослых пациентов с почечной недостаточностью.
<table> <tr> <td> Почечная недостаточность </td>
<td> Cl креатинина, мл/мин </td>
<td> Режим дозирования </td>
</tr> 
<tr> <td> Норма </td> <td> ≥80 </td> <td> 10 мг/сут </td> </tr> 
</table>
<br>&emsp;Пациенты с нарушением функции печени. Пациентам с нарушением только функции печени коррекции режима дозирования не требуется.
<br>&emsp;У пациентов с нарушением и функции печени, и функции почек, рекомендуется коррекция дозирования ( см табл. 1 выше).
</div>
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.08.2022, 20:45
Ответы с готовыми решениями:

Как удалить парный тег, оставив его содержимое?
Имеем: &lt;span style=&quot;color: red;&quot;&gt;text&lt;/span&gt; Нужно оставить только text: .replace(/&lt;span style=\&quot;color:...

Вытащить содержимое блока и его тег
Как вытащить по мимо контента блока, вытащить еще и его тег...

Убрать тег <hide> и его содержимое
Суть: поиск на моем форуме (движке) мне выдает скрытое содержимое под тегом &lt;hide&gt; &lt;hide...

3
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
23.08.2022, 22:04
Цитата Сообщение от AlexPes Посмотреть сообщение
считать содержимое тега div
под содержимым имеется в виду текстовое содержимое ?
примерно так, прямо в браузере набрал, нет среды разработки
C#
1
2
3
4
5
var divElem = // тег div 
 
var content =  divElem.Descendents()
        .Where(tag => tag.NodeName.ToLower() != "table")
        .Select(t=>t.TextContent).ToList();
в content будет список строк, кроме строк таблицы
0
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141
29.08.2022, 11:41  [ТС]
Скажите пожалуйста, что вы подразумеваете под переменной divElem, какого она формата? Это string переменная, XmlDocument или тип из библиотеки anglesharp?

Добавлено через 1 час 30 минут
Поясню ситуацию подробнее:
я считываю все данные со страницы как текст, затем привожу его к типу IDocument, чтобы работать с библиотекой AngleSharp. Далее я достаю заголовок документа. Потом чтобы найти определенную часть текста обрезаю его в строковом формате. Обрезанную версию привожу к типу IDocument и работаю с ним.
Вероятно, это не самый лучший вариант, как достать текст из нужных тегов, но теги на сайте не имеют никаких идентификаторов, например айдишек, поэтому пришлось изворачиваться. Вот одна из страниц сайта https://kiberis.ru/?p=11988

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
//Действующее вещество
            string tagActiveSub = "<h2 >Действующие вещества</h2>";
//переменная для информации о препарате
            Medicine currentPill = new Medicine();
 
            WebRequest req = WebRequest.Create(@"" + Http);
            WebResponse resp = req.GetResponse();
            Stream stream = resp.GetResponseStream();
            StreamReader sr = new StreamReader(stream);
 
             //Текст с интернет-страницы
            var text = sr.ReadToEnd();
 
            using var context = BrowsingContext.New(Configuration.Default);
 
            //Считали текст со страницы
            using var doc = await context.OpenAsync(req => req.Content(text));
 
            //Достали имя
            var name = doc.QuerySelector("title").TextContent.Trim();
 
            name = name.Split(':')[0];
            currentPill.name = name;  
 
            //Активное вещество
            //Вырезается кусок текста до найденного тега
            currentPill.activeSubstance = text.Substring(text.IndexOf(tagActiveSub) + tagActiveSub.Length);
            //Вырезается кусок текста после найденного тега
            currentPill.activeSubstance = currentPill.activeSubstance.Remove(currentPill.activeSubstance.IndexOf("</ul>"));
           
 
            var allActive = (await context.OpenAsync(req => req.Content(currentPill.activeSubstance))).GetElementsByTagName("li");
            var actives = allActive[0].TextContent.Trim();
            currentPill.activeSubstance = makeCorrectString_1(actives).Trim();

Если возвращаться к начальному вопросу данной темы, то там аналогичная ситуация. У меня есть html код в виде строки, и надо достать содержимое тега div без содержимого тега table, table внутри div.
Предложенный выше способ решения не исключает содержимое тега table, к тому же один и тот же текст дублируется несколько раз. Для выполнения предложенной команды привела переменную divElem к типу IDocument. Это верно?


Как все-таки можно достать нужный текст?
0
126 / 94 / 34
Регистрация: 24.06.2022
Сообщений: 253
29.08.2022, 13:27
Лучший ответ Сообщение было отмечено AlexPes как решение

Решение

Цитата Сообщение от AlexPes Посмотреть сообщение
У меня есть html код в виде строки, и надо достать содержимое тега div без содержимого тега table, table внутри div.
поправил,
проверил работает:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
      // найти <div itemprop="administrationRoute">
        var divElem = doc.Body.QuerySelector("div[itemprop='administrationRoute']");
 
            // найти таблицу 
            var child = divElem.QuerySelector("table");
            // удалить таблицу
            divElem.RemoveChild(child);
 
            // выбрать текст всех потомков
            // и сложить в список 
            var content = divElem.Descendents()
            .Select(t => t.TextContent).ToList();
 
        // вывести в консоль
            foreach (var str in content)
            {
                Console.WriteLine(str);
            }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2022, 13:27
Помогаю со студенческими работами здесь

Найти заданный текст и удалить тег, в который текст заключен
Всем привет, есть такого вида xml файл &lt;ns:Document&gt; &lt;ns:Transfer&gt; &lt;tts:Header&gt; ...

Найти из текста символы и удалить его, включая его содержимое
Доброго вечера всем! Нужно разработать программу, которая будет находить текст - &quot;*== TEXT ==&quot;, где TEXT - абсолютно случайное...

Получить тег <imgsrc="..." /> и заменить его содержимое
Получить тег &lt;imgsrc=&quot;...&quot; /&gt; и заменить его содержимое

В файле методом бинарного поиска найти заданный элемент и удалить его
Pascal.abc, Работа с текстовыми файлами В файле методом бинарного поиска найти заданный элемент и удалить его.

Удалить дубликаты из массива, вывести его размер и содержимое
Дан целочисленный массив размера NN. Удалить из массива все элементы, встречающиеся более двух раз, и вывести размер полученного массива и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru