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 18 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
Python常用算法学习基础教程
Apr 13 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
python numpy元素的区间查找方法
Nov 14 Python
Python交互式图形编程的实现
Jul 25 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
Python接口测试数据库封装实现原理
May 09 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
区分python中的进程与线程
Aug 13 Python
Python文件的操作示例的详细讲解
Apr 08 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对二维数组按指定键值key排序示例代码
2013/11/26 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
激活 ActiveX 控件
2006/10/09 Javascript
JavaScript 中的replace方法说明
2007/04/13 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
零基础写python爬虫之神器正则表达式
2014/11/06 Python
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
Django 自定义分页器的实现代码
2019/11/24 Python
python关闭占用端口方式
2019/12/17 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
Python无损压缩图片的示例代码
2020/08/06 Python
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
工作态度检讨书
2014/02/11 职场文书
校园广播稿精选
2014/10/01 职场文书
西安导游词
2015/02/12 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫