2010-09-07 7 views
1

J'essaye de stocker les liens que je gratte d'un site dans un arbre non binaire. Les liens sont hiérarchisés (évidemment). La question est comment puis-je générer l'arbre? Je veux dire, comment vais-je me frayer un chemin à travers les pages fournies par le lien afin que je sache qui est qui est l'enfant. Pour l'instant, je peux obtenir le premier et le second niveau de liens, mais je n'ai aucune idée de comment aller d'ici, en plus de devoir le construire de manière récursive et avoir un moyen de m'arrêter quand je suis sur une feuille (que j'ai).stocker des liens d'un site dans un arbre

Ce que je pensais était quelque chose comme (code Python):

def buildTree(root): 
for node in root.children: 
    if <end condition here>: 
     continue 
    else: 
     nodes = getNodes(urllib2.urlopen(node.url).read()) 
     node.addChildren(nodes) 
     buildTree(node) 

où la racine et les noeuds sont définis par l'utilisateur Noeud classe

+0

Juste pour vous assurer que je vous comprends bien, vous voulez essentiellement faire ramper à travers un site entier et de créer un arbre généalogique de tous les liens qui proviennent d'une lien parent? Vous êtes sur la bonne voie, mais il semble que vous ayez deux choses qui vous troublent - quelle structure de données pour stocker l'information, et comment écrire la fonction récursive. Que voulez-vous faire avec les données par la suite? Visualisez-le? Sérialisez-le? – Dave

+0

Vous avez raison, je veux parcourir l'ensemble du site et créer l'arbre. La fonction récursive je pense que je l'ai eu, mais je ne suis pas sûr de la structure des données, si un arbre est bon pour ça ou pas. – hyperboreean

Répondre

1

De toute évidence, les liens d'un site ne sont pas un arbre, mais un graphique. Vous devriez avoir un objet Page, identifié par une URL, et un objet Lien, qui pointe d'une page à une autre (et la page A peut pointer vers la page B, tandis que la page B pointe vers la page A, en faisant un graphique, au lieu d'un arbre).

algorithme d'analyse pseudo-code:

process_page(current_page): 
    for each link on the current_page: 
    if target_page is not already in your graph: 
     create a Page object to represent target_page 
     add it to to_be_scanned set 
    add a link from current_page to target_page 

scan_website(start_page) 
    create Page object for start_page 
    to_be_scanned = set(start_page) 
    while to_be_scanned is not empty: 
     current_page = to_be_scanned.pop() 
     process_page(current_page) 
+0

Oui, c'est complètement un graphique et pas un arbre. Merci! – hyperboreean

Questions connexes