Wie behalte ich Namespace-Informationen bei der Analyse von HTML mit lxml?

8
%Vor%

Beachten Sie, wie sich das Tag von <fb:like> in einfach <like> verwandelt.

Dies macht die Verarbeitung von Seiten, die XFBML mit lxml enthalten, viel schwieriger. (Das Gleiche passiert mit <g:plusone></g:plusone> )

Jede Hilfe ist willkommen.

    
Sergey Schetinin 06.07.2011, 13:34
quelle

2 Antworten

1

Fügen Sie die fehlenden Namespace-Präfixdefinitionen hinzu. lxml wird die Namespaces auf andere Weise meiden , um es Ihnen leichter zu machen.

Sehr wahrscheinlich enthalten die Websites, die Sie analysieren möchten, diese Namespace-Definitionen nicht, daher sollten Sie sie hinzufügen.

Ähnliches: xmlns: adlcp=" http: // xxx / yy / zzz "

    
jmora 06.07.2011 15:25
quelle
1

Eine Möglichkeit, dieses Problem zu beheben, ist patch libxml2 .

Mit Bezug auf den Quellcode von libxml2.9.2 (https: //git.gnome.org/browse/libxml2/tree/?id=v2.9.2) in SAX2.c (https: //git.gnome. org / browse / libxml2 / tree / SAX2.c? id = v2.9.2) (der interne SAX-Parser zum Erstellen der DOM-Struktur) bei Zeile 1699 Attribute mit xmlns werden im HTML-Modus nicht geparst, und sie werden wie alle geparst andere Attribute in Zeile und 1740. Folglich ist es sinnvoll, Zeile 1622 anzupassen, die den Namen in Präfix und lokalen Teil aufteilt. Änderung:

%Vor%

in

%Vor%

Dann berücksichtigt libxml2 Tags wie <o:p> für Elemente mit dem Namen o:p , das heißt, der Doppelpunkt ist im Elementnamen ohne besondere Bedeutung enthalten. Dies ist die korrekte Interpretation in HTML. Zum Beispiel die HTML5-Spezifikation sagt :

  

In der HTML-Syntax haben Namespacepräfixe und Namespacedeklarationen nicht den gleichen Effekt wie in XML. Zum Beispiel hat der Doppelpunkt in HTML-Elementnamen keine besondere Bedeutung.

Hoffentlich wird diese Änderung für eine zukünftige Version von libxml2 genehmigt. Es gibt einen offenen Fehlerbericht (https: //bugzilla.gnome.org/show_bug.cgi?id=654146).

    
Insightfuls 14.04.2015 06:04
quelle