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

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

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

3 ответа

Решение

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

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

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

РЕДАКТИРОВАТЬ: Другое решение: у разработчика Python Фредрика Лунда (помимо прочего, элемента elementtree) есть функция отмены сохранения сущностей HTML на его веб-сайте, которая работает с десятичными, шестнадцатеричными и именованными сущностями (BeautifulSoup не будет работать с шестнадцатеричными).

Попробуйте использовать BeautifulSoup. Это должно сработать и дать вам хорошо отформатированный DOM для работы с ним.

Эта запись в блоге, похоже, имела определенный успех.

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

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

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

Другие вопросы по тегам