Получение международных символов с веб-страницы?
Я хочу соскрести некоторую информацию с футбольной (футбольной) веб-страницы, используя обычные регулярные выражения Python. Проблема в том, что такие игроки, как первый глава ÄÄRITALO, выходят как & # 196; & # 196; RITALO!
То есть html использует экранированную разметку для специальных символов, таких как & # 196;
Есть ли простой способ чтения HTML в правильную строку Python? Если бы это был XML/XHTML, это было бы легко, парсер сделал бы это.
3 ответа
Я бы порекомендовал BeautifulSoup для очистки HTML. Вы также должны указать ему преобразовывать сущности HTML в соответствующие символы Unicode, например, так:
>>> from BeautifulSoup import BeautifulSoup
>>> html = "<html>ÄÄ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), который будет делать то, что вы хотите.