2016-06-25 1 views
0

J'essaie de créer un service capable d'analyser un fichier d'exportation html de marque-pages de style netscape et de retourner un tableau multidimensionnel où les dossiers et les signets sont imbriqués. dans le fichier.analyse un fichier html de marque-pages de style netscape dans un tableau imbriqué

J'ai trouvé quelques bibliothèques, mais aucune ne conserve les dossiers et bookmarsk imbriqués, ou si elles le font, elles ne renvoient pas un tableau, elles font écho à la ligne 1 par 1 dans la boucle et les indentent en conséquence .

C'est ce que l'exportation de signets de style Nescape ressemble à:

<!DOCTYPE NETSCAPE-Bookmark-file-1> 
<!-- This is an automatically generated file. 
    It will be read and overwritten. 
    DO NOT EDIT! --> 
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> 
<TITLE>Bookmarks</TITLE> 
<H1>Menu des marque-pages</H1> 

<DL><p> 
    <DT><A HREF="place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&folder=TOOLBAR&queryType=1&sort=12&maxResults=10&excludeQueries=1" ADD_DATE="1422119261" LAST_MODIFIED="1422119261">Marqués récemment</A> 
    <DT><A HREF="place:type=6&sort=14&maxResults=10" ADD_DATE="1422119261" LAST_MODIFIED="1422119261">Étiquettes récentes</A> 
    <HR> <DT><H3 ADD_DATE="1422119260" LAST_MODIFIED="1422119260">Mozilla Firefox</H3> 
    <DL><p> 
     <DT><A HREF="https://www.mozilla.org/fr/firefox/help/" ADD_DATE="1422119260" LAST_MODIFIED="1422119260" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/0-1422119260996" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">Aide et didacticiels</A> 
     <DT><A HREF="https://www.mozilla.org/fr/firefox/customize/" ADD_DATE="1422119260" LAST_MODIFIED="1422119260" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/1-1422119260997" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">Personnaliser Firefox</A> 
     <DT><A HREF="https://www.mozilla.org/fr/contribute/" ADD_DATE="1422119260" LAST_MODIFIED="1422119260" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/2-1422119260998" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">Contribuer</A> 
     <DT><A HREF="https://www.mozilla.org/fr/about/" ADD_DATE="1422119260" LAST_MODIFIED="1422119260" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/3-1422119260999" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==">À propos de Mozilla</A> 
    </DL><p> 
    <DT><H3 ADD_DATE="1422119260" LAST_MODIFIED="1422119261" PERSONAL_TOOLBAR_FOLDER="true">Barre personnelle</H3> 
    <DD>Ajoutez des marque-pages dans ce dossier pour les voir apparaître sur votre barre personnelle 
    <DL><p> 
     <DT><A HREF="place:sort=8&maxResults=10" ADD_DATE="1422119261" LAST_MODIFIED="1422119261">Les plus visités</A> 
     <DT><A HREF="https://www.mozilla.org/fr/firefox/central/" ADD_DATE="1422119260" LAST_MODIFIED="1422119260">Débuter avec Firefox</A> 
    </DL><p> 
    <DT><H3 ADD_DATE="1422119260" LAST_MODIFIED="1466788235" UNFILED_BOOKMARKS_FOLDER="true">Marque-pages non classés</H3> 
    <DL><p> 
     <DT><H3 ADD_DATE="1466788235" LAST_MODIFIED="1466788267">Veille</H3> 
     <DL><p> 
      <DT><H3 ADD_DATE="1466788242" LAST_MODIFIED="1466788267">PHP</H3> 
      <DL><p> 
       <DT><A HREF="http://php.net/" ADD_DATE="1466788255" LAST_MODIFIED="1466788255" ICON_URI="http://php.net/favicon.ico" ICON="data:image/png;base64,Qk02AwAAAAAAADYAAAAoAAAAEAAAABAAAAABABgAAAAAAAADAADEDgAAxA4AAAAAAAAAAAAAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICA19fX19fX19fXwICAwICAwICAwICAwICAwICAwICA19fX19fX19fXwICAwICAwICA19fXAAAA19fXwICAwICAwICAwICAwICAwICAwICA19fXAAAA19fXwICAwICAwICA19fXAAAA19fX19fXwICAwICA19fXwICAwICA19fX19fXAAAA19fX19fXwICAwICA19fXAAAAAAAAAAAA19fX19fXAAAA19fX19fXAAAA19fXAAAAAAAAAAAA19fX19fX19fXAAAA19fX19fXAAAA19fXAAAA19fX19fXAAAA19fXAAAA19fX19fXAAAA19fX19fXAAAA19fX19fXAAAA19fXAAAA19fX19fXAAAA19fXAAAA19fX19fXAAAA19fX19fXAAAA19fX19fXAAAA19fXAAAA19fX19fXAAAA19fXAAAA19fX19fXAAAA19fX19fXAAAAAAAAAAAA19fX19fXAAAAAAAAAAAA19fX19fXAAAAAAAAAAAA19fX19fXwICA19fX19fX19fXwICA19fXAAAA19fX19fXwICAwICA19fX19fX19fXwICAwICAwICAwICAwICAwICAwICA19fXAAAA19fXwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICA19fX19fX19fXwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICA" LAST_CHARSET="UTF-8">PHP: Hypertext Preprocessor</A> 
       <DD> 
      </DL><p> 
     </DL><p> 
    </DL><p> 
</DL> 

<H3> sont des dossiers, <a> sont des signets

Je ne sais pas comment commencer. Je devrais probablement utiliser une fonction récursive?

Répondre

0

J'ai écrit un petit utilitaire de ligne de commande nommé Nebooman qui peut nettoyer les signets. Il lit à partir du fichier Netscape Bookmark Format et génère un fichier Netscape Bookmark Format valide. Il a écrit en python3. La classe principale lit les signets du fichier dans la structure imbriquée. Vous pouvez donc utiliser des parties de son code source ou create future request pour améliorer l'API utilitaire.

Votre code peut ressemble:

from nebooman import Manager 
import json 

manager = Manager(verbose=True) 
manager.read_bookmarks_file(open('bookmarks.html')) 
print(json.dump(manager.bookmarks))