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实用日期时间处理方法汇总
May 09 Python
Python中方法链的使用方法
Feb 23 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
python3.5绘制随机漫步图
Aug 27 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
python os模块简单应用示例
May 23 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
django配置app中的静态文件步骤
Mar 27 Python
Python生成随机验证码代码实例解析
Jun 09 Python
利用Python实现斐波那契数列的方法实例
Jul 26 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
Node做中转服务器转发接口
2017/10/18 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
Django中的静态文件管理过程解析
2019/08/01 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
python文字转语音的实例代码分析
2019/11/12 Python
如何通过命令行进入python
2020/07/06 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
工程班组长岗位职责
2013/12/30 职场文书
简历自我评价怎么写好呢?
2014/01/04 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
批评与自我批评总结
2014/10/17 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
2014年客房部工作总结
2014/11/22 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
Python机器学习三大件之一numpy
2021/05/10 Python
字节飞书面试promise.all实现示例
2022/06/16 Javascript