إزالة علامات HTML في AppEngine Python Env (أي ما يعادل Ruby's Sanitize)

StackOverflow https://stackoverflow.com/questions/2415008

سؤال

أنا أبحث عن وحدة python التي ستساعدني في التخلص من علامات HTML مع الاحتفاظ بالقيم النصية.لقد قمت بتجربة BeautifulSoup من قبل ولم أتمكن من معرفة كيفية القيام بهذه المهمة البسيطة.لقد حاولت البحث عن وحدات Python التي يمكنها القيام بذلك ولكن يبدو أنها جميعًا تعتمد على مكتبات أخرى لا تعمل بشكل جيد على AppEngine.

يوجد أدناه نموذج للتعليمة البرمجية من مكتبة Ruby's Sanitize وهذا ما أبحث عنه في Python:

require 'rubygems'
require 'sanitize'

html = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg" />'

Sanitize.clean(html) # => 'foo'

شكرا لاقتراحاتك.

هل كانت مفيدة؟

المحلول

>>> import BeautifulSoup
>>> html = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg" />'
>>> bs = BeautifulSoup.BeautifulSoup(html)  
>>> bs.findAll(text=True)
[u'foo']

هذا يمنحك قائمة (Unicode) سلاسل. إذا كنت ترغب في تحويلها إلى سلسلة واحدة، فاستخدم ''.join(thatlist).

نصائح أخرى

إذا كنت لا ترغب في استخدام libs منفصلة، ​​فيمكنك استيراد أدوات Django القياسية.على سبيل المثال:

from django.utils.html import strip_tags
html = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg'
stripped = strip_tags(html)
print stripped 
# you got: foo

كما أنه مدرج بالفعل في قوالب Django، لذلك لا تحتاج إلى أي شيء آخر، فقط استخدم الفلتر، مثل هذا:

{{ unsafehtml|striptags }}

راجع للشغل، وهذا هو واحد من أسرع الطرق.

باستخدام LXML:

htmlstring = '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg" />'

from lxml.html import fromstring

mySearchTree = fromstring(htmlstring)

for item in mySearchTree.cssselect('a'):
    print item.text
#!/usr/bin/python

from xml.dom.minidom import parseString

def getText(el):
    ret = ''
    for child in el.childNodes:
        if child.nodeType == 3:
            ret += child.nodeValue
        else:
            ret += getText(child)
    return ret

html = '<b>this is <a href="http://foo.com/">a link </a> and some bold text  </b> followed by <img src="http://foo.com/bar.jpg" /> an image'
dom = parseString('<root>' + html + '</root>')
print getText(dom.documentElement)

مطبوعات:

هذا رابط وبعض النص الجريء تليها صورة

في وقت متأخر، ولكن.

يمكنك استخدام Jinja2.markup ()

http://jinja.pocoo.org/docs/api/#jinja2.markup.striptags.

from jinja2 import Markup 
Markup("<div>About</div>").striptags()
u'About'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top