PK!ع$$bookmarks_parser/__init__.pyfrom .bookmarks_parser import parse PK!3? ? $bookmarks_parser/bookmarks_parser.pyfrom bs4 import BeautifulSoup def get_node_data(node): data = {} for child in node: if child.name == 'a': data['type'] = 'bookmark' data['url'] = child.get('href') data['title'] = child.text data['add_date'] = child.get('add_date') data['icon'] = child.get('icon') # only in FF icon_uri = child.get('icon_uri') if icon_uri: data['icon_uri'] = icon_uri tags = child.get('tags') if tags: data['tags'] = tags.split(',') elif child.name == 'h3': data['type'] = 'folder' data['title'] = child.text data['add_date'] = child.get('add_date') data['last_modified'] = child.get('last_modified') data['ns_root'] = None # for Bookmarks Toolbar in FF and Bookmarks bar in Chrome if child.get('personal_toolbar_folder'): data['ns_root'] = 'toolbar' # FF Other Bookmarks if child.get('unfiled_bookmarks_folder'): data['ns_root'] = 'other_bookmarks' elif child.name == 'dl': # store DL element reference for further processing the child nodes data['__dir_dl'] = child if data['type'] == 'folder' and not data.get('__dir_dl'): if node.next_sibling and node.next_sibling.name == "dd": dls = node.next_sibling.find_all('dl') if dls: data['__dir_dl'] = dls[0] return data def process_dir(bookmark_dir, level): items = [] menu_root = None for child in bookmark_dir: if child.name != 'dt': continue item_data = get_node_data(child) if level == 0 and (not item_data.get('ns_root')): if menu_root is None: # For chrome if child.previous_sibling.name == "dt": menu_root = {'title': "Other bookmarks", 'children': [], 'ns_root': 'menu'} # for FF else: menu_root = {'title': "Bookmarks Menu", 'children': [], 'ns_root': 'menu'} if item_data.get('__dir_dl'): item_data['children'] = process_dir(item_data['__dir_dl'], level + 1) del item_data['__dir_dl'] menu_root['children'].append(item_data) else: if item_data.get('__dir_dl'): item_data['children'] = process_dir(item_data['__dir_dl'], level + 1) del item_data['__dir_dl'] items.append(item_data) if menu_root: items.append(menu_root) return items def parse(file_path): with open(file_path, 'rb') as f: soup = BeautifulSoup(f, "html5lib") dls = soup.find_all('dl') bookmarks = process_dir(dls[0], 0) return bookmarks PK!HnHTU&bookmarks_parser-0.1.3.dist-info/WHEEL A н#Z;/"d&F[xzw@Zpy3Fv]\fi4WZ^EgM_-]#0(q7PK!H{W)bookmarks_parser-0.1.3.dist-info/METADATAUo0~_a6q: ThskbfǞ4mJǾre̱;U7t/d2U^2so#͌,1GJzM,_dhpN$sjJS%cVfϕd"%9OH8 +W(I ^H#tVCex*nF91> 8Z>〦H3rQ5dt'QaR2'+Ƿn[<nx5*):0Y%A^8)O=px)p3U:(]t3XA._envcEFsVs*j԰2-FY&FHUW䅀rşqx82lH(6.9+cB0]h oś!I70ಱC;-ٷ v -m>wQ~zKu3Qӕ1Z^tqv) EdZ՚3 )g*qH 6BSŘTT(—5bWnOp=B) L%w?PK!H'bookmarks_parser-0.1.3.dist-info/RECORD͹r@gY,,6FáY \!\ӧr&c ۿ&&5}LhFWm5b e,9hրTW77odrrqV4r)&y&z<-~pm𡃶~=8Cc͊)Kp ~Utd6ѻi:]o(wSh VB:dKI]h+SɯyL+E#;%R+٪:I1x:&pPK!ع$$bookmarks_parser/__init__.pyPK!3? ? $^bookmarks_parser/bookmarks_parser.pyPK!HnHTU& bookmarks_parser-0.1.3.dist-info/WHEELPK!H{W)w bookmarks_parser-0.1.3.dist-info/METADATAPK!H'bookmarks_parser-0.1.3.dist-info/RECORDPK