Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2012 16:37:12

tfox
Зарегистрирован: 2012-04-13
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

В языке PHP есть функция strip_tags. Она удаляет все html-
теги из текста кроме тех которые определил пользователь. Например.
strip_tags(text_html, “<b><i><u>”) удалит все теги, кроме выделения
жирным, курсива, подчеркивания.
Вот здесь подробнее: http://php.net/manual/en/function.strip-tags.php

Подскажите есть ли эквивалентная функция в Python?

Офлайн

#2 Июнь 20, 2012 21:05:38

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

В стандарте такой функции нет, насколько я знаю. Можете посмотреть всевозможные html-парсеры или написать ручками.



Офлайн

#3 Июнь 21, 2012 06:15:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

Оно?

# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import urllib2
s=urllib2.urlopen('http://python.su/forum/topic/14860/')
print BeautifulSoup(s).findAll(['h1', 'li'], text=True)



Офлайн

#4 Июнь 21, 2012 06:23:47

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

Я для такого использовал lxml.html.clean



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Июнь 22, 2012 17:54:42

tfox
Зарегистрирован: 2012-04-13
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

FishHook
Оно?

# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import urllib2
s=urllib2.urlopen('http://python.su/forum/topic/14860/')
print BeautifulSoup(s).findAll(['h1', 'li'], text=True)

Нет. Данный код выбирает данные которые находятся внутри тегов <h1> и <li>.
Необходимо почистить код от всех тегов, кроме <h1> и <li>.

Офлайн

#6 Июнь 22, 2012 19:55:26

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

A так?

import re
def strip_tags(html, exceptions=None):
    def repl(match):
        matched = match.group(0)
        tag = matched.replace('/', '')
        if exceptions and tag in exceptions:
            return matched
    return re.sub("<[^>]+>", repl, html)



Отредактировано Ed (Июнь 22, 2012 19:56:53)

Офлайн

#7 Июнь 22, 2012 23:55:29

tfox
Зарегистрирован: 2012-04-13
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

Ed
A так?
import re
def strip_tags(html, exceptions=None):
    def repl(match):
        matched = match.group(0)
        tag = matched.replace('/', '')
        if exceptions and tag in exceptions:
            return matched
    return re.sub("<[^>]+>", repl, html)

Спасибо Работает

Офлайн

#8 Июнь 23, 2012 06:11:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

при удалении tag
из строки

abc<tag><!-- <tag> --></tag>abc
должна получиться строка
abc<!-- <tag> -->abc



Офлайн

#9 Июнь 23, 2012 13:33:09

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

Тогда так:

import re

class Stripper(object):
def __init__(self):
self.incomment = 0

def strip(self, html, exceptions=None):
def repl(match):
matched = match.group(0)
if matched == '<!--':
self.incomment += 1
elif matched == '-->':
self.incomment -= 1
elif not self.incomment:
tag = matched.replace('/', '')
if not exceptions or tag not in exceptions:
return ''
return matched

result = re.sub("<!--|-->|<[^>]+?>", repl, html)
self.incomment = 0
return result

print Stripper().strip("abc<tag><!-- <tag> --></tag>abc")



Отредактировано Ed (Июнь 23, 2012 13:34:25)

Офлайн

#10 Июнь 24, 2012 06:17:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Есть ли в Python функция аналогичная PHP-функции strip_tags

из описания функции по ссылке в первом сообщении следует, что она использует конечный автомат

It uses the same tag stripping state machine as the fgetss() function.

<tag><img alt="abc<tag>def" src="pic.png"></tag>
<img alt="abc<tag>def" src="pic.png">

    <style>
/* style for <tag> */
tag { color: #ffffff; }
</style><tag>abc</tag>
    <style>
/* style for <tag> */
tag { color: #ffffff; }
</style>abc



Отредактировано py.user.next (Июнь 24, 2012 06:18:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version