長時間使用瀏覽器,沒有了新鮮感,伴隨着不爽與忍耐,儘管通過各種方式反饋給官方,然並卵。當忍耐到了盡頭,就百度“瀏覽器”,然後找下一個評分最高的,又再次開始了不爽與忍耐。
現在的瀏覽器或本身具備、或安裝插件的方式,都提供了比較強大的擴展功能,我最喜歡的變異鼠標手勢與保存密碼。換瀏覽器的時候不僅僅是安裝瀏覽器這麼簡單,還需要轉移書籤,還有安裝符合習慣的插件以及轉移網站密碼。
對於插件和網站密碼,在這裏不做討論,畢竟沒有這麼高的技術能力。在此先來討論一下換瀏覽器之後的書籤。
在這裏介紹一下我換了Chrome瀏覽器之後,對書籤做的瘦身操作。
目標
- 將書籤裏的鏈接,按照URL進行去重,然後把重複的、目錄較深的書籤路徑加書籤名打印出來
- 測試去重後剩下來的鏈接,判斷當初收藏的網站是否還在線。
本機環境
系統: Windows 10
Python版本: Python 3.7
Chrome版本: 72.0.3626.121
步驟
- 解析Chrome書籤文件,獲取書籤名、書籤URL以及書籤目錄
- 依次檢查書籤名和書籤URL,判斷是否與之前的重複
- 若重複,則判斷兩個書籤哪一個目錄層級比較深,若相同,打印第二個
- 測試去重後的所有書籤URL,打印失效鏈接
不足之處
- Chrome所有書籤保存在一個bookmarks文件中,並且有一定的校驗算法,以我目前的能力,無法直接在bookmarks文件中直接刪除重複的書籤,只能打印出目錄及書籤名,然後在瀏覽器中手動刪除(大寫尷尬)。
- 測試URL的有效性時,因爲某種無上偉大的迷之大法,只能校驗牆內的鏈接。可自行“卍解”後測試。
腳本
# -*- coding: utf-8 -*-
import os
import json
import requests
def read_file():
"""讀取書籤文件內容"""
# 書籤路徑
google_fav_file_path = 'C:/Users/sheng/AppData/Local/Google/Chrome/User Data/Default/Bookmarks'
if os.path.exists(google_fav_file_path):
with open(google_fav_file_path, 'rb') as r:
goog_fav = r.read().decode('utf-8')
return goog_fav
def get_bookmark_total(bookstr):
"""將書籤文件轉換成Python字典"""
if len(book_str):
book_json = json.loads(book_str)
# 得到主要內容
children_bar = book_json['roots']['bookmark_bar']['children']
return children_bar
def get_detail(children: list, name, index):
"""遞歸解析書籤信息"""
if len(children) > 0:
for child in children:
if 'children' in child and child.get('type') == 'folder':
# 書籤文件夾,進行遞歸解析
get_detail(child.get('children'), f'{name} -- {child.get("name")}', index+1)
if child.get('type') == 'url':
# 書籤URL,進行去重判斷
print_complex_url(index, name, child.get('name'), child.get('url'))
total_fav = dict()
def print_complex_url(index, direct, name, url):
"""按照書籤名檢查是否重複"""
if f'{name}' in total_fav:
# 重複
if index >= total_fav.get(f'{name}')[0]:
print(direct, name)
else:
print(total_fav.get(f'{name}')[1], name)
total_fav[f'{name}'] = [index, direct, name, url]
else:
# 不重複
total_fav[f'{name}'] = [index, direct, name, url]
def is_bookmarks_active():
"""檢查去重後的書籤是否有效"""
for key in total_fav:
url = total_fav.get(key)[3]
is_ok = is_url_ok(url)
if is_ok in [-1, -2, -3]:
print(total_fav.get(key)[1], key)
def is_url_ok(url):
"""判斷URL是否有效"""
try:
resu = requests.get(url, timeout=5)
if resu.status_code == 200:
# 正常
return 0
else:
return -3
except requests.exceptions.ConnectionError as e:
return -1
except Exception as e:
return -2
if __name__ == '__main__':
book_str = read_file()
children_bar = get_bookmark_total(book_str)
# print(type(children_bar))
get_detail(children_bar, 'root', 0)
print('檢查書籤重複完成')
is_bookmarks_active()