На этом шаге мы рассмотрим примеры использования соотвествующих парсеров.
Вы хотите заменить HTML- и XML-сущности, такие как &entity; или code;, соответствующим текстом. Или же вам нужно произвести текст,
но экранировать некоторые символы (например, <, > или &).
Если вы производите текст, довольно просто заменить спецсимволы типа < или > с помощью функции html.escape(). Например:
>>> s = 'Elements are written as "<tag>text</tag>".' >>> import html >>> print(s) Elements are written as "<tag>text</tag>". >>> print(html.escape(s)) Elements are written as "<tag>text</tag>". >>> # Отключим экранирование кавычек >>> print(html.escape(s, quote=False)) Elements are written as "<tag>text</tag>". >>>
Если вы хотите произвести текст в кодировке ASCII и вставить коды символов вместо отсутствующих в ASCII символов, вы можете использовать аргумент errors='xmlcharrefreplace' с различными функциями ввода-вывода. Например:
>>> s = 'Spicy Jalapeño' >>> s.encode('ascii', errors='xmlcharrefreplace') b'Spicy Jalapeño' >>>
Чтобы заменить сущности в тексте, нужен другой подход. Если вы обрабатываете HTML или XML, попробуйте для начала настоящий парсер HTML или XML. Обычно эти инструменты автоматически позаботятся о замене значений во время парсинга, и вам не придется об этом беспокоиться.
Если же по каким-то причинам вы получили голый текст с включением сущностей, и вы хотите заменить их вручную, то сможете сделать это с помощью различных функций и методов, связанных с парсерами HTML и XML. Например:
>>> s = 'Spicy "Jalapeño".' >>> from html.parser import HTMLParser >>> p = HTMLParser() >>> p.unescape(s) 'Spicy "Jalapeño".' >>>
>>> t = 'The prompt is >>>' >>> from xml.sax.saxutils import unescape >>> unescape(t) ''The prompt is >>>' >>>
О правильном экранировании спецсимволов при генерировании HTML или XML легко забыть. Это особенно верно, если вы генерируете вывод самостоятельно, используя print() или другую базовую функцию форматирования строк. Есть простое решение - использовать функцию типа htmlescape().
Если вам нужно произвести обратное преобразование текста, к вашим услугам различные функции типа xml.sax.saxutils.unescape(). Однако мы все же рекомендуем использовать парсер. Например, если при обработке HTML и XML использовать такие парсеры, как html.parser или xml.etree.ElementTree, то они самостоятельно позаботятся о замене сущностей в тексте.
На следующем шаге мы рассмотрим токенизацию текста.