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.