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

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

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

Author24 — интернет-сервис помощи студентам
Очистите файл от HTML-тегов: http://dfedorov.spb.ru/python/files/p.html
Выведите на экран «чистый» текст. P.S. можно использовать только
стандартные модули Python.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2020, 10:50
Ответы с готовыми решениями:

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

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

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

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

9
Заклинатель змей
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,604
18.06.2020, 16:46 2
Hydies, могу предложить только Beautiful Soup
0
1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
18.06.2020, 17:09 3
Hydies, Если я не ошибаюсь (HTML занимался в прошлом и немного) любые теги размещаются в угловых скобках <...> . Если это так , то нужно искать смещение первого символа "<" и затем первого символа ">" и срезом удалять этот кусок строки. И так в цикле удалить из строки (текста) все теги.
Возможно все это просто сделать с помощью регулярных выражений. Но я в них не разбираюсь.
Но это будет работать, только если в исходном тексте нет символов "<" и ">".
Но и в этом случае задача решаема, только алгоритм усложнится. Потребуется убеждаться, что мы имеем дело с символами тега а не для других мест в исходном тексте.
0
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,786
Записей в блоге: 9
18.06.2020, 18:11 4
Цитата Сообщение от 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
Заклинатель змей
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,604
18.06.2020, 19:13 5
Рыжий Лис, регулярки и HTML? Ну такое
0
1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
18.06.2020, 19:20 6
Рыжий Лис, Вот открывающий тег
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
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,786
Записей в блоге: 9
18.06.2020, 19:21 7
Цитата Сообщение от 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
1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
18.06.2020, 19:54 8
Итак подытожу. Нужно используя встроенные средства питона для парсинга, что бы решить данную задачу. Для этого нужно изучить эти средства питона. Я про них читал, когда интересовался парсингом, но не изучал.

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

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

Добавлено через 5 минут
Кстати, лазия сейчас по интернету, по моему в той ссылке, которую я дал, я заметил, что для парсинга используется в том числе json. Глянул список модулей питона. json это один из встроенных модулей питона.
0
Эксперт Python
5434 / 3857 / 1215
Регистрация: 28.10.2013
Сообщений: 9,553
Записей в блоге: 1
18.06.2020, 19:54 9
Цитата Сообщение от 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
1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
18.06.2020, 19:59 10
А вот еще встроенный модуль в питоне parser. Видимо именно он используется для парсинга, и именно про него я находил инфу в интернете, как парсить питоном.

Добавлено через 2 минуты
Garry Galler, как всегда дал исчерпывающий ответ
0
18.06.2020, 19:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2020, 19:59
Помогаю со студенческими работами здесь

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

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

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

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

реализация Html тэгов в поле формы на Web
Подскажите как можно реализовать вывода данных, в котором есть HTML тэти на форме через WEB...

Замена тэгов в шаблоне Word на данные из Excel (поиск всех однотипных тэгов)
Прошу помощи по следующей проблеме: есть шаблон договора Word, в данном шаблоне расставлены тэги...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru