Python [lxml] - очистка html-тегов

from lxml.html.clean import clean_html, Cleaner
    def clean(text):
        try:        
            cleaner = Cleaner(scripts=True, embedded=True, meta=True, page_structure=True, links=True, style=True,
                      remove_tags = ['a', 'li', 'td'])
            print (len(cleaner.clean_html(text))- len(text))
            return cleaner.clean_html(text) 
        except:
            print 'Error in clean_html'
            print sys.exc_info()
            return text

Я собрал вышеупомянутый (уродливый) код в качестве моих начальных набегов на землю python. Я пытаюсь использовать очиститель lxml, чтобы очистить пару html-страниц, поэтому в конце я просто оставил текст и ничего больше - но попробуйте, как я мог, выше, похоже, не работает как таковой, я все еще осталось с подменю разметки (и, похоже, она не разбита html) и, в частности, ссылки, которые не удаляются, несмотря на аргументы, которые я использую в remove_tags и links=True

любая идея, что происходит, возможно, я лаяла неправильное дерево с помощью lxml? Я думал, что это способ пойти с html-анализом в python?

Ответ 1

Не уверен, что этот метод существовал примерно в то время, когда вы задали свой вопрос, но если вы пройдете

document = lxml.html.document_fromstring(html_text)
raw_text = document.text_content()

Это должно вернуть вам весь текстовый контент в html-документе, минус все разметки.

Ответ 2

из David объединяет текст без разделителя:

   import lxml.html
   document = lxml.html.document_fromstring(html_string)
   # internally does: etree.XPath("string()")(document)
   print document.text_content()

но этот помог мне - конкатенация так, как мне было нужно:

   from lxml import etree
   print "\n".join(etree.XPath("//text()")(document))

Ответ 3

Я думаю, вы должны проверить Beautiful Soup. Воспользуйтесь рекомендацией этой статьи и разделите элементы HTML следующим образом:

from BeautifulSoup import BeautifulSoup

''.join(BeautifulSoup(page).findAll(text=True))

Где page - ваша строка html.

Если вам нужно дополнительное разъяснение, вы можете проверить Dive на примере Python на разбор HTML.