Очистка текста после html2txt

#python #lxml

#python #lxml

Вопрос:

Я использую lxml для преобразования html в txt. Я почти добрался до того, чего хотел, с готовыми функциями синтаксического анализа, преобразования и некоторых частей очистки (табуляции, пробелы, пустые строки), а программа запущена и запущена.

Однако, после того, как я попробовал свой код примерно с сотней html’ов (все с разных сайтов), я заметил некоторые исключения, то есть строки типа:

 #wrapper #PrimaryNav {margin:0;*overflow:hidden;}
a.scbbtnred{background-position:right -44px;}
a.scbbtnblack{background-position:right -176px;}
.ghsearch{width:58px;height:21px;line-height:21px;background-position:0 -80px;}
a.scbbtnred span span{background-color:#f00;background-position:0 -22px;}
  

Я предполагаю, что это CSS? или другие вещи веб-программирования. Но я совершенно не знаком с ними.

Вопросы: Что это за строки? И какие-либо предложения о том, как избавиться от этих строк?


Редактировать: вот как я сделал части перед этим вопросом для справки для всех, кто в будущем зайдет на этот пост (новичок в python, многое здесь можно улучшить, но для меня это работает нормально):

 # Function for html2txt using lxml
# Author:
# http://groups.google.com/group/cn.bbs.comp.lang.python/browse_thread/thread/781a357e2ce66ce8
def html2text(html):
    tree = lxml.etree.fromstring(html, lxml.etree.HTMLParser()) if isinstance(html, basestring) else html 
    for skiptag in ('//script', '//iframe', '//style'):    
        for node in tree.xpath(skiptag):
            node.getparent().remove(node)
    # return lxml.etree.tounicode(tree, method='text')
    return lxml.etree.tostring(tree, encoding=unicode, method='text')



#Function for cleanup the text:
# 1: clearnup: 1)tabs, 2)spaces, 3)empty lines;
# 2: remove short lines
def textcleanup(text):
    # temp list for process
    text_list = []
    for s in text.splitlines():
        # Strip out meaningless spaces and tabs
        s = s.strip()
        # Set length limit
        if s.__len__() > 35:
            text_list.append(s)
    cleaned = os.linesep.join(text_list)
    # Get rid of empty lines
    cleaned = os.linesep.join([s for s in cleaned.splitlines() if s])
    return cleaned
  

Ответ №1:

Это действительно CSS. Вы получаете документ, подобный этому:

 <style>
#wrapper #PrimaryNav {margin:0;*overflow:hidden;}
a.scbbtnred{background-position:right -44px;}
a.scbbtnblack{background-position:right -176px;}
.ghsearch{width:58px;height:21px;line-height:21px;background-position:0 -80px;}
a.scbbtnred span span{background-color:#f00;background-position:0 -22px;}
</style>
<div>
    <p>This bit is HTML</p>
</div>
  

Перед разбором текста необходимо удалить все style теги.

Комментарии:

1. Привет, Эрик, это именно то, что я искал. Спасибо!