Вопрос

Я пытаюсь очистить весь HTML-код от строки, чтобы конечным результатом был текстовый файл.У меня есть некоторые исследования по различным "конвертерам", и я начинаю склоняться к созданию своего собственного словаря для сущностей и символов и выполнению замены в строке.Я рассматриваю это, потому что хочу автоматизировать процесс, а качество базового html сильно варьируется.Чтобы начать сравнивать скорость моего решения и одной из альтернатив, например, pyparsing, я решил протестировать замену \xa0, используя строковый метод replace.Я получаю

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)

Фактическая строка кода была

s=unicodestring.replace('\xa0','')

В любом случае - я решил, что мне нужно предварить это буквой r, поэтому я запустил эту строку кода:

s=unicodestring.replace(r'\xa0','')

Он запускается без ошибок, но я, когда смотрю на фрагмент s, вижу, что \xaO все еще там

Это было полезно?

Решение

может быть, тебе стоит заняться

s=unicodestring.replace(u'\xa0',u'')

Другие советы

s=unicodestring.replace('\xa0','')

.. пытается создать символ юникода \xa0, который недопустим в sctring в формате ASCII (строковый тип по умолчанию в Python до версии 3.x)

Причина r'\xa0' ошибка did not вызвана тем, что в необработанной строке escape-последовательности не имеют никакого эффекта.Вместо того, чтобы пытаться кодировать \xa0 в символе Юникода он рассматривал строку как "буквальную обратную косую черту", "буквальный x" и так далее..

Ниже приведены те же самые:

>>> r'\xa0'
'\\xa0'
>>> '\\xa0'
'\\xa0'

Это что-то решенное в Python v3, поскольку строковый тип по умолчанию - unicode, так что вы можете просто сделать..

>>> '\xa0'
'\xa0'

Я пытаюсь очистить весь HTML-код от строки, чтобы конечным результатом был текстовый файл

Я бы настоятельно рекомендовал Прекрасный суп для этого.Написать инструмент для очистки HTML сложно (учитывая, насколько ужасен большинство HTML), и BeautifulSoup отлично справляется как с синтаксическим анализом HTML, так и с работой с Unicode..

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>")
>>> print soup.prettify()
<html>
 <body>
  <h1>
   Hi
  </h1>
 </body>
</html>

Посмотрите на кодеки стандартная библиотека, в частности кодировать и декодировать методы, предоставляемые в базовом классе Codec.

Еще есть хорошая статья здесь это объединяет все это.

Вместо этого лучше использовать стандартные возможности Python.

Например:

string = unicode('Hello, \xa0World', 'utf-8', 'replace')

или

string = unicode('Hello, \xa0World', 'utf-8', 'ignore')

где replace заменит \xa0 к \\xa0.

Но если \xa0 действительно не имеет для вас смысла, и вы хотите удалить его, а затем используйте ignore.

Просто замечание относительно очистки HTML.Это очень-очень тяжело, поскольку

<
body
>

Это действительный способ написания HTML.Просто к сведению.

Вы можете преобразовать его в Юникод следующим образом:

print u'Hello, \xa0World'  # print Hello,  World
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top