2010-08-04 6 views
1

Я очищаю страницу html, а затем создаю объект xml.dom.minidom.parseString().необходимо выборочно удалять html-объекты (&)

Однако html-страница имеет «&». Я могу использовать cgi.escape, чтобы преобразовать его в &amp;, но он также преобразует все мои теги html <> в &lt;&gt;, что делает parseString() несчастливым.

Как мне это сделать? я предпочел бы не просто взломать его и сразу заменить «&„S

благодаря

+0

Я думаю, причина, по которой я говорю, я бы предпочел не просто использовать .replace(), мне интересно, есть ли более умный способ создать объект dom. кажется, что он должен быть в состоянии рассказать, какие данные (между тегами), а что нет? Возможно, лучшим примером могло бы быть, если в данных было '' ', которые должны быть преобразованы в' < ' – ggez44

ответ

1

Для выскабливание, попробуйте использовать библиотеку, которая может обрабатывать такой HTML «тег суп», как LXML, который имеет html parser (а также специальный HTML пакет в lxml.html) или BeautifulSoup (вы также обнаружите, что эти библиотеки также содержат другие материалы, которые облегчают очистку/работу с html, кроме возможности обрабатывать плохо сформированные документы: получение информации из форм, абсолютное гиперссылки, использование селекторов css ...)

1

я предпочел бы не просто взломать его и прямо заменить“&» s

Er, Зачем? Это то, что делает cgi.escape - эффективно просто операция поиска и замены для определенных символов, которые необходимо экранировать.

Если вы хотите заменить один символ, просто заменить один символ:

yourstring.replace('&', '&amp;') 

Не бить вокруг куста.

0

Если вы хотите, чтобы убедиться, что вы не случайно вновь бежать без того убежали & (т.е. не превратить &amp; в &amp;amp; или &szlig; в &amp;szlig;), вы можете

import re 
newstring = re.sub(r"&(?![A-Za-z])", "&amp;", oldstring) 

Это оставит & сек когда они сопровождаются письмом.

0

Вы не должны используйте синтаксический анализатор XML для анализа данных, не являющихся XML. Вместо этого найдите парсер HTML, вы будете счастливее в долгосрочной перспективе. В стандартной библиотеке есть несколько (HTMLParser и htmllib), а BeautifulSoup - любимый сторонний пакет.