2008-09-10 1 views
6

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

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

ответ

7

Я бы порекомендовал 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 разработчик Фредрик Lundh (автор ElementTree, между прочим) имеет a function to unsecape HTML entities на своем сайте, который работает с десятичной, шестнадцатеричной и названным объектам (BeautifulSoup будет не работают с шестнадцатеричными).

0

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

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

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

2

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

This blog запись, похоже, имела некоторый успех.

Смежные вопросы