编程地带

爬取Arcconf文档教程并自动生成Gitbook文档显示 -

2019-08-08  本文已影响5人  MA木易YA

1. Gitbook

    Gitbook可以将md文件自动做成类似电子书的形式,自动生成目录、风格简约,使用方便,建议写文档的同学都可以学习一下,书写方面同样是支持markdownhtml语法的

2. 使用流程

网上大都能搜到更具体的教程,这里就不赘述了,主要就是

I. 安装NodeJS(推荐v4.0.0及以上版本)
II. npm install gitbook-cli -g,gitbook-cli是一个在同一系统上安装和使用多个版本的GitBook的实用程序。它将自动安装所需版本的GitBook来构建一本书。
III. 初始化书籍目录(有点类似git初始化仓库,执行一次即可,会生成README.mdSUMMARY.md文件,少一个都不行QAQ):gitbook init
IV. 网页上预览:git serve,执行后会返回一个网址,进入即可预览(linux下记得打开4000端口或者更改端口)
V. 书写方面主要是README.md作为图书简介,会自动放在整个文档的坐前面显示,SUMMARY的第一个板块也是README.md,如果你强行更改,README.md还是会出现在第一个位置(网页上显示的第一个位置,回到默认的Introduce,虽然SUMMARY中没有他),SUMMARY作为目录,按以下格式书写,[]()作为每一章或者某个大类的标题,前面加上二级强调符号则作为次级文档(每一篇文档的标题),后面的()中就是具体的包含文章的.md文档

# CATALOG —— Operations Notes

* [简介](README.md)

* [Arcconf ](arcconf.md)
  - [设置Spinup参数](设置Spinup参数.md)
  - [设置硬盘PowerSave功能](设置硬盘PowerSave功能.md)

3. 文件初始化

    我们新建一个目录作为书籍目录,做相应初始化以及数据保存,将各个文件的基础信息写入,注意这里的模式,初始化时可以直接用w覆盖,因为不需要保留之前的数据,调用subprocess执行gitbook init初始化书籍

def dir_init(dir, path='.'):
    if dir not in os.listdir(path):
        os.mkdir(dir)
    os.chdir(dir)
    subprocess.Popen('gitbook init', shell=True)
    with open('README.md', 'w', encoding='utf-8') as f:
        f.write("# Operations Notes\n")
        f.write("\n")
        f.write(">用以记录运维学习过程中的工作记录以及命令操作")
    with open('SUMMARY.md', 'w', encoding='utf-8') as f:
        f.write("# CATALOG —— Operations Notes\n")
        f.write("\n")
        f.write("* [简介](README.md)\n")
        f.write("\n")
        f.write("* [Arcconf ](arcconf.md)\n")
    with open('arcconf.md', 'w', encoding='utf-8') as f:
        f.write("# Arcconf操作指南\n")
        f.write("\n")
        f.write(">记录Arcconf的命令操作\n")

4. 数据写入

    这一步中我们将之前获取到的数据写入文件当中,并注意处理好换行符以及每个部分的代码格式,因为需要符合markdown规范,我们使用字符串构造,注意文件名的格式,有/的需要转换成其他的,这里我将/转换成了_,文件写入部分针对表格也不需要直接调用方法,文件中打开文件可能会产生冲突,所以直接写比较好。

def write_md(url):
    title, function, order, tabs, tutor, exams_title, exams = get_data_html(get_html(url))
    # 准备目录文件
    with open('SUMMARY.md', 'a', encoding='utf-8') as f:
        for title_ in title:
            f.write("  - [{}]({}.md)\n".format(title_, title_.replace('/', '_')))

    for title__ in list(enumerate(title)):
        with open(title__[1].replace('/', '_') + '.md', 'a', encoding='utf-8') as f:
            # title__[0]是位置,title__[1]是名称
            f.write("# {}\n".format(title__[1]))
            f.write("\n")
            f.write("## 命令功能\n")
            f.write(">{}\n".format(function[title__[0]]))
            f.write("\n")
            f.write("## 命令格式\n")
            if len(order[title__[0]]) == 1:
                for data in order[title__[0]]:
                    f.write("`{}`\n".format(data))
            else:
                f.write("~~~\n")
                for data in order[title__[0]]:
                    f.write("{}\n".format(data))
                f.write("~~~\n")
            f.write("\n")
            f.write("## 参数说明\n")

            title, line, body = get_data(tabs[title__[0]])
            result = [" | ".join(data) for data in body]
            f.write("| " + "| ".join(title) + "|" + "\n")
            f.write("| " + " | ".join(line) + "|" + "\n")
            for data in result:
                f.write("| " + data + "|" + "\n")
            # write_data(tabs[title__[0]], title__[1] + ".md")
            f.write("\n")
            f.write("使用指南\n")
            for data in tutor[title__[0]]:
                f.write("- {}\n".format(data))
            f.write("\n")
            f.write("使用实例\n")
            f.write("~~~\n")
            if len(exams_title[title__[0]]) > 1:
                f.write("{}\n".format(str("&".join(exams_title[title__[0]]).replace("#", ""))))
            else:
                f.write("{}\n".format(str(exams_title[title__[0]][0])))
            for data in exams[title__[0]]:
                f.write("{}\n".format(data))
            f.write("~~~\n")
    subprocess.Popen('gitbook serve', shell=True)

5. 预览

image.png
image.png
上一篇下一篇

猜你喜欢

热点阅读