Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 12

Очистка текста от HTML тэгов

18.06.2020, 10:50. Показов 11947. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Очистите файл от HTML-тегов: http://dfedorov.spb.ru/python/files/p.html
Выведите на экран «чистый» текст. P.S. можно использовать только
стандартные модули Python.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2020, 10:50
Ответы с готовыми решениями:

Удаление тэгов из текста HTML страницы
Имеется кусок HTML-текста с тэгами. Задача: очистить текст от тэгов. Как это сделать? Может уже есть готовое решение (компонента...

Очистка текста от Html-тегов
Здравствуйте. Мне необходимо сделать программу которая очистить хтмл теги. На начальном этапе я сделал выбор хтмл файла и открываю его в...

Реализовать функцию проверки правильности html-тэгов в html-документе
нужно реализовать функцию на с++.Долго сидел,понять не могу.

9
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
18.06.2020, 16:46
Hydies, могу предложить только Beautiful Soup
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
18.06.2020, 17:09
Hydies, Если я не ошибаюсь (HTML занимался в прошлом и немного) любые теги размещаются в угловых скобках <...> . Если это так , то нужно искать смещение первого символа "<" и затем первого символа ">" и срезом удалять этот кусок строки. И так в цикле удалить из строки (текста) все теги.
Возможно все это просто сделать с помощью регулярных выражений. Но я в них не разбираюсь.
Но это будет работать, только если в исходном тексте нет символов "<" и ">".
Но и в этом случае задача решаема, только алгоритм усложнится. Потребуется убеждаться, что мы имеем дело с символами тега а не для других мест в исходном тексте.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.06.2020, 18:11
Цитата Сообщение от Viktorrus Посмотреть сообщение
только если в исходном тексте нет символов "<" и ">".
Вот это считать за тег или нет?

HTML5
1
2
3
4
5
6
<div id="krqqdiv" 
class="smallfont krqq_popupbutton" 
onmouseout="krobj.settime=setTimeout('hide_insert()',2000); krobj.insert_over = false;" 
onmousedown="krobj.insert_text();" 
onmouseover="clearTimeout(krobj.settime); krobj.insert_over=true; catchSelection();" 
title="Цитировать выделенный текст" style="left: -100px; top: -100px; visibility: hidden;">Цитировать</div>
Добавлено через 2 минуты
Python
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
import re
 
t = '''\
<!DOCTYPE html>
<html>
    <head>
       <meta charset="utf-8">
       <title>Абзацы</title>
    </head>
    <body>
        <p>Абзац - отрезок письменной речи, состоящий из нескольких предложений.</p>
        Выделение фразы в особый абзац <br> усиливает падающий на него смысловой акцент.<br>
        Для выделения абзаца его, <br> помимо новой строки, печатают со строки красной, <br> то есть отделяют вертикальным отступом <br> от соседних абзацев и/или делают абзацный отступ.
 
<div id="krqqdiv" 
class="smallfont krqq_popupbutton" 
onmouseout="krobj.settime=setTimeout('hide_insert()',2000); krobj.insert_over = false;" 
onmousedown="krobj.insert_text();" 
onmouseover="clearTimeout(krobj.settime); krobj.insert_over=true; catchSelection();" 
title="Цитировать выделенный текст" style="left: -100px; top: -100px; visibility: hidden;">Цитировать</div>
 
<p><img src="http://unecon.ru/sites/all/themes/by_igavs/images/footer_gr.png" alt="Картинка грифона"></p>
 
    </body>
</html>
'''
 
print(re.sub(r'<.*?>', '', t))
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
18.06.2020, 19:13
Рыжий Лис, регулярки и HTML? Ну такое
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
18.06.2020, 19:20
Рыжий Лис, Вот открывающий тег
Python
1
2
3
4
5
6
<div id="krqqdiv" 
class="smallfont krqq_popupbutton" 
onmouseout="krobj.settime=setTimeout('hide_insert()',2000); krobj.insert_over = false;" 
onmousedown="krobj.insert_text();" 
onmouseover="clearTimeout(krobj.settime); krobj.insert_over=true; catchSelection();" 
title="Цитировать выделенный текст" style="left: -100px; top: -100px; visibility: hidden;">
его нужно удалять
и удалить закрывающий тег
Python
1
</div>
Хотя теги бывают вложенные. Я не уверен, что текст будет читаемым, если просто удалить теги.
Аналогично с таблицами. Если удалить теги формирующие таблицу, то текст будет не читаемым.
Алгоритм, который предложил я годится только для простых, не структурированных текстов.
А в общем, для получения из страницы с тегами содержательный текст нужно использовать существующие методики парсинга и используемые для этого программы. Других вариантов я думаю нет.

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

Добавлено через 45 секунд
Цитата Сообщение от Hydies Посмотреть сообщение
P.S. можно использовать только
стандартные модули Python.
Я имел ввиду это условие в задаче.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.06.2020, 19:21
Цитата Сообщение от DobroAlex Посмотреть сообщение
регулярки и HTML? Ну такое
Да норм, я же не парсю ими.

В джанге реализовано так:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
def strip_tags(value):
    """Return the given HTML with all tags stripped."""
    # Note: in typical case this loop executes _strip_once once. Loop condition
    # is redundant, but helps to reduce number of executions of _strip_once.
    value = str(value)
    while '<' in value and '>' in value:
        new_value = _strip_once(value)
        if value.count('<') == new_value.count('<'):
            # _strip_once wasn't able to detect more tags.
            break
        value = new_value
    return value


Правда, в _strip_once спрятан парсер
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
18.06.2020, 19:54
Итак подытожу. Нужно используя встроенные средства питона для парсинга, что бы решить данную задачу. Для этого нужно изучить эти средства питона. Я про них читал, когда интересовался парсингом, но не изучал.

Добавлено через 11 минут
Я думал, что читал у Лутца про парсинг с помощью питона. Но сейчас посмотрел, у него этого нет. Видимо мне это попадалось на просторах интернета, когда я было попытался заняться парсингом, но потом бросил это занятие.

Добавлено через 14 минут
Hydies, Вот одна из ссылок о парсинге на питоне.
"Всё о парсинге сайтов на Python"
https://proglib.io/p/parsing-sites/
Но у меня в памяти смутно, но я читал про какие то средства встроенные в питон (с примерами), которые находятся то ли в модуле, то ли просто инструкции питона предназначенные для парсинга. Но это может рассказать только человек, который занимается парсингом и изучал эти средства питона.
Если хотите разобраться сами, то это нужно лазить по интернету и искать информацию по использованию питона для парсинга сайтов.
Я уже от этого полностью отошел.

Добавлено через 5 минут
Кстати, лазия сейчас по интернету, по моему в той ссылке, которую я дал, я заметил, что для парсинга используется в том числе json. Глянул список модулей питона. json это один из встроенных модулей питона.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.06.2020, 19:54
Цитата Сообщение от DobroAlex Посмотреть сообщение
регулярки и HTML? Ну такое
Да везде так делается, где нужно тупо clean text from html сделать.
Вот gensim'овский препроцессор gensim.parsing.preprocessing.strip_tags( text):
Python
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
>>> RE_TAGS = re.compile(r"<([^>]+)>", re.UNICODE)
>>> def strip_tags(text,marker=''):
        '''Remove tags from s using RE_TAGS.
        >>> strip_tags('<href="http://google.com">')
        ''
        >>> 
        '''
        return RE_TAGS.sub(marker, text)
 
>>> print(strip_tags(t))
 
 
    
       
       Абзацы
    
    
        Абзац - отрезок письменной речи, состоящий из нескольких предложений.
        Выделение фразы в особый абзац  усиливает падающий на него смысловой акцент.
        Для выделения абзаца его,  помимо новой строки, печатают со строки красной,  то есть отделяют вертикальным отступом  от соседних абзацев и/или делают абзацный отступ.
 
Цитировать
 
 
 
    
 
 
>>>
От лишних пробелов уже другая регулярка нужна: RE_WHITESPACE = re.compile(r'(\s)+', re.UNICODE)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
18.06.2020, 19:59
А вот еще встроенный модуль в питоне parser. Видимо именно он используется для парсинга, и именно про него я находил инфу в интернете, как парсить питоном.

Добавлено через 2 минуты
Garry Galler, как всегда дал исчерпывающий ответ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.06.2020, 19:59
Помогаю со студенческими работами здесь

Замена тэгов HTML
Дабы не создавать похожую тему обращусь здесь. Как с помощью: sXML = Regex.Replace(sXML,...

Замена тэгов HTML в строке
Доброго времени суток. Есть проблема. сформирован отчёт в Word. Строки содержат тэги HTML &lt;br/&gt; и т.д. Можно ли как-нибудь...

Экранирование HTML тэгов в цикле foreach
Для формирования списка заказанных товаров и отправки его на почту имеется следующий код: //содержимое заказа foreach ($product...

Чтение Html Без потери тэгов
Стоит следующая задачка: имеется шаблон отчета в формате html, где установлены теги специального вида (не html). Нужно прочитать файл и...

Код или библиотека фильтрации html тэгов
Здравствуйте. Суть такова: есть WYSIWYG редактор натравленный на textarea. Простым length конечно считает количество, введённые в поле,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru