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算法学习之计数排序实例
Dec 18 Python
python实现在字符串中查找子字符串的方法
Jul 11 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
python中模块的__all__属性详解
Oct 26 Python
Python绘制频率分布直方图的示例
Jul 08 Python
Flask-WTF表单的使用方法
Jul 12 Python
Python pickle模块实现对象序列化
Nov 22 Python
在Tensorflow中查看权重的实现
Jan 24 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
python em算法的实现
Oct 03 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 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制作静态网站的模板框架(二)
2006/10/09 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
python定时器使用示例分享
2014/02/16 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python 并发下载器实现方法示例
2019/11/22 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
Python for i in range ()用法详解
2020/09/18 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
新闻发布会活动策划方案
2014/09/15 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
鲁迅故里导游词
2015/02/05 职场文书
实名检举信范文
2015/03/02 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
详解python网络进程
2021/06/15 Python