2008-09-10 13 views
6

Ich möchte einige Informationen von einem Fußball (Fußball) Webseite mit einfachen Python Regexp's kratzen. Das Problem ist, dass Spieler wie der erste, ÄÄRITALO, als & # 196 herauskommt; & # 196; RITALO!
Das heißt, HTML verwendet für die Sonderzeichen, wie & # 196;Internationale Zeichen von einer Webseite erhalten?

Gibt es eine einfache Möglichkeit, die HTML in die richtige Python-Zeichenfolge zu lesen? Wenn es XML/XHTML wäre, wäre es einfach, der Parser würde es tun.

Antwort

7

Ich würde BeautifulSoup für HTML-Scraping empfehlen. Sie müssen auch sagen, HTML-Entitäten zu dem entsprechenden Unicode-Zeichen zu konvertieren, etwa so:

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

(Es wäre schön, wenn der Standard-codecs Modul einen Codec für diese enthält, so dass Sie tun konnten, "some_string".decode('html_entities') aber leider es funktioniert nicht)

EDIT: Eine andere Lösung: Python Entwickler Fredrik Lundh (Autor von elementtree ua) hat a function to unsecape HTML entities auf seiner Website, die mit dezimal, hex und benannten Entitäten (BeautifulSoup Werke arbeite nicht mit den Hexen).

0

Ich habe es selbst nicht ausprobiert, aber haben Sie versucht,

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

Es scheint eine Methode htmldecode (Text) zu haben, die tun würde, was Sie wollen.

2

Versuchen Sie mit BeautifulSoup. Es sollte den Trick machen und Ihnen ein schön formatiertes DOM geben, mit dem Sie auch arbeiten können.

This blog Eintrag scheint etwas Erfolg damit gehabt zu haben.