Используйте Python для разбора HTML-данных, которые содержат "&" - PullRequest
2 голосов
/ 14 сентября 2011

Я использую библиотеку Python SGMLParser для анализа некоторых HTML. Я сталкиваюсь с HTML-тегом вида

<td class="school">Texas A&amp;M</td>

Я бы хотел прочитать "Texas A & M". Но когда handle_data вызывается, он вызывается с "Texas A", а затем, отдельно, "M" (цитаты для ясности).

Как заменить

&amp; 

строка с & перед вызовом, без замены всех специальных амперсандов во всей строке (некоторые из которых мне могут понадобиться).

Спасибо!

Ответы [ 3 ]

4 голосов
/ 14 сентября 2011

Если вы переключитесь с устаревшей SGMLParser на современную альтернативу, такую ​​как LXML (которая также обрабатывает HTML), это становится тривиальным:

>>> etree.fromstring('''<td class="school">Texas A&amp;M</td>''').text
'Texas A&M'
2 голосов
/ 14 сентября 2011

SGMLParser имеет метод convert_entityref(), но вместо устаревшего SGMLParser я бы порекомендовал использовать lxml или Beautiful Soup , которые имеют лучший API синтаксического анализатора.

1 голос
/ 14 сентября 2011

Ссылки на сущности, такие как &amp;, обрабатываются handle_entity.Убедитесь, что этот метод умеет переводить &amp;.Реализация по умолчанию должна вызывать handle_data('&'), но вы, возможно, случайно перезаписали ее.

Также, если возможно, рассмотрите возможность использования гораздо более продвинутого lxml .

...