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获取网页状态码示例
Mar 30 Python
从零学Python之hello world
May 21 Python
浅析Python基础-流程控制
Mar 18 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
Python绘制的二项分布概率图示例
Aug 22 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
python获取Pandas列名的几种方法
Aug 07 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
Python如何实现机器人聊天
Sep 10 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 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/04/02 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
php curl模拟post请求小实例
2013/11/13 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
php与js的区别是什么
2013/08/05 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
javascript常用方法汇总
2014/12/02 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
JS面向对象编程详解
2016/03/06 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
pycham查看程序执行的时间方法
2018/11/29 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Python函数式编程实例详解
2020/01/17 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
预备党员党课思想汇报
2014/01/13 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python
python blinker 信号库
2022/05/04 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android