Remove all html in python?

后端 未结 3 852
情话喂你
情话喂你 2020-12-10 23:12

Is there a way to remove/escape html tags using lxml.html and not beautifulsoup which has some xss issues? I tried using cleaner, but i want to remove all html.

相关标签:
3条回答
  • 2020-12-10 23:55

    This uses lxml's cleaning functions, but avoids the result being wrapped in an HTML element.

    import lxml
    
    doc = lxml.html.document_fromstring(str) 
    cleaner = lxml.html.clean.Cleaner(allow_tags=[''], remove_unknown_tags=False)
    str = cleaner.clean_html(doc).text_content() 
    

    or as a one liner

    lxml.html.clean.Cleaner(allow_tags=[''], remove_unknown_tags=False).clean_html(lxml.html.document_fromstring(str)).text_content()
    

    It works by providing parsing the html manually into a document object, and giving that to the cleaner class. That way clean_html also returns an object rather than a string. Then the text can be recovered without a wrapper element using text_content() method.

    0 讨论(0)
  • 2020-12-11 00:01

    Try the .text_content() method on an element, probably best after using lxml.html.clean to get rid of unwanted content (script tags etc...). For example:

    from lxml import html
    from lxml.html.clean import clean_html
    
    tree = html.parse('http://www.example.com')
    tree = clean_html(tree)
    
    text = tree.getroot().text_content()
    
    0 讨论(0)
  • 2020-12-11 00:03

    I believe that, this code can help you:

    from lxml.html.clean import Cleaner
    
    html_text = "<html><head><title>Hello</title><body>Text</body></html>"
    cleaner = Cleaner(allow_tags=[''], remove_unknown_tags=False)
    cleaned_text = cleaner.clean_html(html_text)
    
    0 讨论(0)
提交回复
热议问题