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使用PIL模块实现给图片打水印的方法
May 22 Python
Python中的命令行参数解析工具之docopt详解
Mar 27 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
Tensorflow累加的实现案例
Feb 05 Python
如何基于Python实现数字类型转换
Feb 07 Python
Django更新models数据库结构步骤
Apr 01 Python
pandas分批读取大数据集教程
Jun 06 Python
Python sorted对list和dict排序
Jun 09 Python
scrapy-splash简单使用详解
Feb 21 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
PHP计数器的实现代码
2013/06/08 PHP
php不写闭合标签的好处
2014/03/04 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
Python 异常处理实例详解
2014/03/12 Python
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
python图像处理之反色实现方法
2015/05/30 Python
python rsa 加密解密
2017/03/20 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
python删除文本中行数标签的方法
2018/05/31 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
详解python tkinter模块安装过程
2020/01/06 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
如何提高MySql的安全性
2014/06/19 面试题
高中的职业生涯规划书
2013/12/28 职场文书
创意活动策划书
2014/01/15 职场文书
体育活动总结范文
2014/05/04 职场文书
团结演讲稿范文
2014/05/23 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
vue ant design 封装弹窗表单的使用
2022/06/01 Vue.js