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

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

18.06.2020, 10:50. Показов 11764. Ответов 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
 Аватар для Рыжий Лис
5972 / 3734 / 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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