it-swarm.com.de

Wie kann ich HTML-Entitäten in einer Zeichenfolge in Python 3.1 deaktivieren?

Ich habe mich umgesehen und nur Lösungen für python 2.6 und früher gefunden, NICHTS dazu in python 3.X. (Ich habe nur Zugriff auf Win7 Box.)

Ich MUSS das in 3.1 und vorzugsweise ohne externe Bibliotheken tun können. Derzeit habe ich httplib2 installiert und kann auf die Eingabeaufforderung curl zugreifen (so erhalte ich den Quellcode für Seiten). Leider decodiert curl keine HTML-Entities, meines Wissens konnte ich in der Dokumentation keinen Befehl zum Decodieren finden.

JA, ich habe versucht, Beautiful Soup zum Laufen zu bringen, VIELE MAL ohne Erfolg in 3.X. Wenn Sie EXPLICIT-Anweisungen geben könnten, wie Sie es in python 3 in einer MS Windows-Umgebung zum Laufen bringen, wäre ich Ihnen sehr dankbar.

Also, um klar zu sein, muss ich die Saiten wie folgt drehen: Suzy & John in eine Zeichenfolge wie diese: "Suzy & John".

58
VolatileRig

Sie könnten die Funktion html.unescape verwenden:

In Python3.4 + (Dank an J.F. Sebastian für das Update):

import html
html.unescape('Suzy & John')
# 'Suzy & John'

html.unescape('"')
# '"'

In Python3.3 oder älter:

import html.parser    
html.parser.HTMLParser().unescape('Suzy & John')

In Python2 :

import HTMLParser
HTMLParser.HTMLParser().unescape('Suzy & John')
159
unutbu

Sie können xml.sax.saxutils.unescape zu diesem Zweck. Dieses Modul ist in der Standardbibliothek Python enthalten und zwischen Python 2.x und Python= 3.x portierbar .

>>> import xml.sax.saxutils as saxutils
>>> saxutils.unescape("Suzy & John")
'Suzy & John'
14
Greg Hewgill

Anscheinend habe ich nicht den Ruf, etwas anderes zu tun, als dies zu posten. Die Antwort von unutbu lässt Zitate nicht unberührt. Das einzige, was ich fand, war diese Funktion:

import re
from htmlentitydefs import name2codepoint as n2cp

def decodeHtmlentities(string):
    def substitute_entity(match):        
        ent = match.group(2)
        if match.group(1) == "#":
            return unichr(int(ent))
        else:
            cp = n2cp.get(ent)
            if cp:
                return unichr(cp)
            else:
                return match.group()
    entity_re = re.compile("&(#?)(\d{1,5}|\w{1,8});")
    return entity_re.subn(substitute_entity, string)[0]

Was ich daraus habe Seite .

6
Derrick Petzold

Python 3.x hat auch html.entities

3
YOU

In meinem Fall habe ich eine HTML-Zeichenfolge in AS3 Escape-Funktion maskiert. Nachdem ich eine Stunde gegoogelt habe und nichts Nützliches gefunden habe, habe ich diese Recusrive-Funktion geschrieben, um meinen Bedürfnissen gerecht zu werden. Hier ist es,

def unescape(string):
    index = string.find("%")
    if index == -1:
        return string
    else:
        #if it is escaped unicode character do different decoding
        if string[index+1:index+2] == 'u':
            replace_with = ("\\"+string[index+1:index+6]).decode('unicode_escape')
            string = string.replace(string[index:index+6],replace_with)
        else:
            replace_with = string[index+1:index+3].decode('hex')
            string = string.replace(string[index:index+3],replace_with)
        return unescape(string)

Edit-1 Funktionalität zur Behandlung von Unicode-Zeichen hinzugefügt.

2
Simanas

Ich bin nicht sicher, ob dies eine eingebaute Bibliothek ist oder nicht, aber es sieht so aus, als ob Sie 3.1 benötigen und unterstützen.

Von: http://docs.python.org/3.1/library/xml.sax.utils.html?highlight=html%20unescape

xml.sax.saxutils.unescape (data, entity = {}) Deaktivieren Sie '&', '<' und '>' in einer Datenzeichenfolge.

1
TheJacobTaylor