Получение международных символов с веб-страницы?

Я хочу очистить некоторую информацию с футбольной (футбольной) веб-страницы, используя простые python regexp. Проблема в том, что такие игроки, как первый парень, ÄÄRITALO, выходят как # 196; & # 196; RITALO!
То есть, html использует экранированную разметку для специальных символов, таких как & # 196;

Есть ли простой способ чтения html в правильную строку python? Если бы это был XML/XHTML, это было бы легко, синтаксический анализатор сделал бы это.

Ответ 1

Я бы рекомендовал BeautifulSoup для очистки HTML. Вам также необходимо сообщить об этом, чтобы преобразовать объекты HTML в соответствующие символы Юникода, например:

>>> from BeautifulSoup import BeautifulSoup    
>>> html = "<html>&#196;&#196;RITALO!</html>"
>>> soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
>>> print soup.contents[0].string
ÄÄRITALO!

(Было бы неплохо, если бы стандартный codecs модуль содержал кодек для этого, чтобы вы могли сделать "some_string".decode('html_entities'), но к сожалению, это не так!)

EDIT: Другое решение: Разработчик Python Фредрик Лунд (автор elementtree, помимо прочего) имеет функцию для незаметности HTML-объектов на своем веб-сайте, которая работает с десятичной, шестнадцатеричной и именованные объекты (BeautifulSoup не будет работать с шестнадцатеричными).

Ответ 2

Попробуйте использовать BeautifulSoup. Он должен сделать трюк и дать вам хорошо отформатированный DOM, чтобы работать с ним.

Запись в этом блоге, похоже, имела некоторый успех.

Ответ 3

Я сам не пробовал, но вы пробовали

http://zesty.ca/python/scrape.html?

Кажется, у вас есть метод htmldecode (text), который будет делать то, что вы хотите.