13.1 HTMLParser -- Semplice parser per HTML e XHTML

Questo modulo definisce una classe HTMLParser che rappresenta la base per analizzare file di testo formattati in HTML (HyperText Markup Languages) e XHTML. Diversamente dal parser in htmllib, questo non è basato sul parser SGML sgmllib.

class HTMLParser( )
La classe HTMLParser viene istanziata senza argomenti.

Un'istanza di HTMLParser scorre i dati in HTML e richiama funzioni di gestione quando i tag vengono aperti e chiusi. La classe HTMLParser è stata ideata per essere sovrascritta dall'utente per ottenere i comportamenti desiderati.

Diversamente dal parser in htmllib, questo non controlla che il tag di chiusura coincida con quello di apertura e non richiama il gestore dei tag di chiusura per gli elementi che vengono implicitamente chiusi dalla chiusura di altri elementi.

Le istanze di HTMLParser hanno i seguenti metodi:

reset( )
Reimposta l'istanza. Tutti i dati non analizzati andranno persi. Questo metodo viene invocato implicitamente al momento dell'istanziazione.

feed( data)
Invia dati al parser. Il testo a questo punto viene analizzato come se fosse un elemento completo; i dati incompleti vengono bufferizzati finché non vengono inviati altri dati o viene invocato il metodo close().

close( )
Forza l'analisi di tutti i dati bufferizzati come se fossero seguiti dal loro tag di chiusura. Questo metodo può essere ridefinito in una classe derivata per definire ulteriori analisi alla fine dell'input, ma la versione ridefinita dovrebbe sempre invocare il metodo close() sulla classe base HTMLParser.

getpos( )
Restituisce il numero di riga corrente e l'offset.

get_starttag_text( )
Restituisce il testo dell'ultimo tag di apertura analizzato. Normalmente questo non dovrebbe essere necessario per una analisi, ma potrebbe essere utile da distribuire con HTML ``così come sviluppato'' o per rigenerare l'input con cambiamenti minimali (spazi tra gli attributi preservati, ecc. etc.).

handle_starttag( tag, attrs)
Questo metodo viene invocato per gestire l'apertura di un tag. È pensato per essere sovrascritto in una classe derivata; l'implementazione nella classe base non fa niente.

L'argomento tag è il nome del tag scritto in caratteri minuscoli. L'argomento attrs è una lista di coppie (nome, valore) che contengono gli attributi contenuti tra le parentesi angolari <> del tag. Il nome name viene convertito in caratteri minuscoli e le virgolette doppie ed i backslash nel valore value dell'attributo, vengono interpretati. Ad esempio, per il tag <A HREF="http://www.cwi.nl/">, il metodo sarà "handle_starttag('a', [('href', 'http://www.cwi.nl/')])".

handle_startendtag( tag, attrs)
Simile a handle_starttag(), ma viene chiamato quando il parser incontra un tag vuoto in stile XHTML (<a .../>). Il metodo può essere sovrascritto da una sotto classe che richiede questa particolare informazione lessicale; l'implementazione predefinita invoca semplicemente handle_starttag() e handle_endtag().

handle_endtag( tag)
Questo metodo è invocato per gestire il tag di chiusura di un elemento. È progettato per essere sovrascritto da una classe derivata; l'implementazione della classe base non fa nulla. L'argomento tag è il nome del tag in caratteri minuscoli.

handle_data( data)
Questo metodo viene invocato per analizzare dati arbitrari. È progettato per essere sovrascritto da una classe derivata; l'implementazione della classe base non fa nulla.

handle_charref( name)
Questo metodo viene invocato per analizzare il riferimento ad un carattere della forma "&#ref;". È progettato per essere sovrascritto da una classe derivata; l'implementazione della classe base non fa nulla.

handle_entityref( name)
Questo metodo viene invocato per analizzare un generico riferimento ad un'entità dalla forma "&name;" dove name è un generico riferimento ad un'entità. È progettato per essere sovrascritto da una classe derivata; l'implementazione della classe base non fa nulla.

handle_comment( data)
Questo metodo viene invocato quando viene incontrato un commento. L'argomento comment è una stringa che contiene del testo racchiuso tra i delimitatori "--" e "--", ma non i delimitatori stessi. Per esempio, per il commento "<!--text-->", il metodo verrà richiamato con l'argomento 'text'. È progettato per essere sovrascritto da una classe derivata; l'implementazione della classe base non fa nulla.

handle_decl( decl)
Questo metodo viene invocato quando il parser legge una dichiarazione dichiarazione SGML. Il parametro decl dovrà essere interamente contenuto nella dichiarazione markup <!...>. È progettato per essere sovrascritto da una classe derivata; l'implementazione della classe base non fa nulla.

handle_pi( data)
Questo metodo viene invocato quando il parser incontra una istruzione che comporta un'analisi. Il parametro data contiene l'intera istruzione di analisi. Per esempio, per l'istruzione <?proc color='red'>, il metodo verrà chiamato in questo modo: handle_pi("proc color='red'"). È progettato per essere sovrascritto da una classe derivata; l'implementazione della classe base non fa nulla.

Note: La classe HTMLParser usa le regole sintattiche dell'SGML per analizzare le istruzioni. Se una istruzione di analisi XHTML usa il carattere"?", questo "?" verrà incluso nel parametro data.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.