Idea di un algoritmo per rilevare la struttura di navigazione di un sito web?

4

Attualmente sto sviluppando un importatore di qualsiasi sito Web HTML (statico) esistente e esistente nella prossima versione del nostro CMS.

Mentre il download dei file è stato risolto con successo, mi sto staccando i capelli quando si tratta di rilevare una struttura del sito (pagine e sottopagine) esclusivamente dai file HTML, senza che l'utente specifichi ulteriori suggerimenti.

Fondamentalmente voglio ottenere un albero come:

+ Root page 1
     + Child page 1
     + Child page 2
         + Child child page1
     + Child page 3
+ Root page 2
     + Child page 4
+ Root page 3
+ ...

vale a dire. Voglio essere in grado di rilevare la struttura del menu dai collegamenti all'interno delle pagine. Questo non deve essere accurato al 100%, ma almeno voglio ottenere più di una semplice lista.

Ho pensato di guardare più pagine per vedere aree simili e identificarle come aree di menu e analizzare i collegamenti lì, ma dopotutto non sono quella soddisfatta di questa idea.

La mia domanda:

Riesci a immaginare qualche algoritmo quando si tratta di rilevare una tale struttura?

Aggiornamento 1:

Quello che sto cercando è non un web spider, ma un algoritmo crea un albero logico della relazione delle pagine per poter creare pagine e sottopagine all'interno del mio CMS quando le importi .

Aggiornamento 2:

A partire da Robert's suggerimento risolverò questo iniziando dalla pagina radice, quindi analizzerò semplicemente i collegamenti man mano che procedi e tratterai ogni collegamento all'interno di una pagina semplicemente come una pagina secondaria. Probabilmente ricoverò non in un approfondimento prima modo, ma piuttosto in un breadth-first modo per ottenere una struttura di navigazione più equilibrata.

    
posta Uwe Keim 21.11.2011 - 20:56
fonte

1 risposta

4

Hai bisogno di una struttura dati ricorsiva. Qualcosa del genere:

public class TreeNode<T>
{
    public T node { get; set; }
    public List<TreeNode<T>> descendants { get; set; }
}
    
risposta data 21.11.2011 - 21:08
fonte

Leggi altre domande sui tag