python导出chrome书签到markdown文件的实例代码


Posted in Python onDecember 27, 2017

python导出chrome书签到markdown文件,主要就是解析chrome的bookmarks文件,然后拼接成markdown格式的字符串,最后输出到文件即可。以下直接上代码,也可以在 py-chrome-bookmarks-markdown 中直接参见源码。

from json import loads
import argparse
from platform import system
from re import match
from os import environ
from os.path import expanduser
# 过滤name
filter_name_list = {'My work', '书签栏', 'websites'}
html_escape_table = {
  "&": "&",
  '"': """,
  "'": "'",
  ">": ">",
  "<": "<",
}
output_file_template = """
<h3>书签目录</h3>
{catelog}
{bookmark_bar}
{other}
"""
# 如需本地调试可注释掉这一段 START
parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
                 description="python导出chrome书签到markdown文件.")
parser.add_argument("input_file", type=argparse.FileType('r', encoding='utf-8'), nargs="?",
          help="读取书签的位置,可以指定文件位置(相对路径,绝对路径都可以),非必填,默认为Chrome的默认书签位置")
parser.add_argument("output_file", type=argparse.FileType('w', encoding='utf-8'),
          help="读取书签的位置,可以指定文件位置(相对路径,绝对路径都可以),必填")
args = parser.parse_args()
if args.input_file:
  input_file = args.input_file
else:
  if system() == "Darwin":
    input_filename = expanduser("~/Library/Application Support/Google/Chrome/Default/Bookmarks")
  elif system() == "Linux":
    input_filename = expanduser("~/.config/google-chrome/Default/Bookmarks")
  elif system() == "Windows":
    input_filename = environ["LOCALAPPDATA"] + r"\Google\Chrome\User Data\Default\Bookmarks"
  else:
    print('Your system ("{}") is not recognized. Please specify the input file manually.'.format(system()))
    exit(1)
  try:
    input_file = open(input_filename, 'r', encoding='utf-8')
  except IOError as e:
    if e.errno == 2:
      print("The bookmarks file could not be found in its default location ({}). ".format(e.filename) +
         "Please specify the input file manually.")
      exit(1)
output_file = args.output_file
# 如需本地调试可注释掉这一段 END
# 本地调试可以指定文件名测试 START
# input_filename = 'C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default/Bookmarks'
# input_file = open(input_filename, 'r', encoding='utf-8')
# output_file_name = 'test2.md'
# output_file = open(output_file_name, 'w', encoding='utf-8')
# 本地调试可以指定文件名测试 END
# 目录
catelog = list()
def html_escape(text):
  return ''.join(html_escape_table.get(c, c) for c in text)
def html_for_node(node):
  # 判断url和children即判断是否包含在文件夹中
  if 'url' in node:
    return html_for_url_node(node)
  elif 'children' in node:
    return html_for_parent_node(node)
  else:
    return ''
def html_for_url_node(node):
  if not match("javascript:", node['url']):
    return '- [{}]({})\n'.format(node['name'], node['url'])
  else:
    return ''
def html_for_parent_node(node):
  return '{0}\n\n{1}\n'.format(filter_catelog_name(node),
                 ''.join([filter_name(n) for n in node['children']]))
# 过滤文件夹
def filter_name(n):
  if n['name'] in filter_name_list:
    return ''
  else:
    return html_for_node(n)
# 过滤目录名
def filter_catelog_name(n):
  if n['name'] in filter_name_list:
    return ''
  else:
    catelog.append('- [{0}](#{0})\n'.format(n['name']))
    return '<h4 id={0}>{0}</h4>'.format(n['name'])
contents = loads(input_file.read())
input_file.close()
bookmark_bar = html_for_node(contents['roots']['bookmark_bar'])
other = html_for_node(contents['roots']['other'])
catelog_str = ''.join(a for a in catelog)
output_file.write(output_file_template.format(catelog=catelog_str, bookmark_bar=bookmark_bar, other=other))

导出示例: https://github.com/kent666a/kent-resources/blob/master/bookmarks.md

总结

以上所述是小编给大家介绍的python导出chrome书签到markdown文件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python生成日历实例解析
Aug 21 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
python实现dijkstra最短路由算法
Jan 17 Python
详解Python 切片语法
Jun 10 Python
利用Python如何实时检测自身内存占用
May 09 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 Python
pytorch实现线性回归以及多元回归
Apr 11 Python
AI:如何训练机器学习的模型
Apr 16 Python
Python 循环读取数据内存不足的解决方案
May 25 Python
Python类的继承和多态代码详解
Dec 27 #Python
快速查询Python文档方法分享
Dec 27 #Python
Java及python正则表达式详解
Dec 27 #Python
python matplotlib画图实例代码分享
Dec 27 #Python
python爬虫使用cookie登录详解
Dec 27 #Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 #Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 #Python
You might like
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
composer.lock文件的作用
2016/02/03 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
php实现等比例压缩图片
2018/07/26 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
JS中常用的消息框总结
2018/02/24 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python随机数函数代码实例解析
2020/02/09 Python
英国著名的药妆网站:Escentual
2016/07/29 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
大四自我鉴定范文
2013/10/06 职场文书
心理健康心得体会
2014/01/02 职场文书
法人授权委托书格式
2014/04/08 职场文书
球队口号
2014/06/18 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL