语雀批量导出MarkDown文件,指定知识库所有内容

需求

导出语雀的全部文件,并导出为markdown格式。

技术

python,本人是学的是java并不会python,所以不会介绍太多的技术

流程

1. 安装python环境,参考其他文章

https://www.bilibili.com/video/BV1qW4y1a7fU?p=4&vd_source=a683c51673975db4bf588857848354aa

2. 刚安装的python缺少两个包,导入这两个包*

在这里插入图片描述在这里插入图片描述

打开cmd,运行如下命令,安装requests包原理相同
C:\Users\wcb>pip install psutil -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 创建所需文件

在这里插入图片描述

登录网页版语雀,获取语雀token链接 👉https://www.yuque.com/settings/tokens/new

在这里插入图片描述

{
    "TOKEN": "语雀token",                                # 用户token
    "USER_AGENT": "Rion",                               # 就是一个用户名称,可以随意写,但必须要有
    "BASE_URL": "https://customspace.yuque.com/api/v2", # 语雀基础api
    "DATA_PATH": "yuque"                                # 数据储存的文件夹名称(默认当前文件夹下创建)
}

4.创建实现文件(test.py)

还记得第二布吗,刚安装的环境运行下面的代码缺包

"""
    这是一个导出语雀库中所有文档的脚本, 并将文件转为md格式
"""
import json
import sys
import os
import re
import requests
import psutil
from datetime import datetime

if getattr(sys, 'frozen', False):
    APPLICATION_PATH = os.path.dirname(sys.executable)
else:
    APPLICATION_PATH = os.path.dirname('.')
jsonConfig = json.load(open(os.path.join(APPLICATION_PATH, "config.json"), encoding='utf-8'))


class ExportYueQueDoc:
    def __init__(self):
        try:
            if getattr(sys, 'frozen', False):
                APPLICATION_PATH = os.path.dirname(sys.executable)
            else:
                APPLICATION_PATH = os.path.dirname('.')
            self.jsonConfig = json.load(open(os.path.join(APPLICATION_PATH, "config.json"), encoding='utf-8'))
            self.base_url = self.jsonConfig['BASE_URL']
            self.token = self.jsonConfig['TOKEN']
            self.headers = {
                "User-Agent": self.jsonConfig['USER_AGENT'],
                "X-Auth-Token": self.jsonConfig['TOKEN']
            }
            self.data_path = self.jsonConfig['DATA_PATH']
        except:
            raise ValueError("config.json 有误")

    def get_user_info(self):
        """获取用户信息"""
        res_obj = requests.get(url=self.base_url + '/user', headers=self.headers)
        if res_obj.status_code != 200:
            raise ValueError("Token 信息错误")
        user_json = res_obj.json()
        self.login_id = user_json['data']['login']
        self.uid = user_json['data']['id']
        self.username = user_json['data']['name']
        print("=========== 用户信息初始化成功 ==========")

    def get_repos_data(self):
        """获取知识库"""
        repos_json = requests.get(self.base_url + '/users/' + self.login_id + '/repos', headers=self.headers).json()
        repos_list = []
        for item in repos_json['data']:
            rid = item['id']  # 知识库id
            name = item['name']  # 知识库名称
            repos_list.append({"rid": rid, "repos_name": name})
        return repos_list

    def get_article_data(self, repos_list):
        """获取文章数据"""
        article_list = []
        for repos in repos_list:
            article_datas = requests.get(self.base_url + '/repos/' + str(repos['rid']) + '/docs',
                                         headers=self.headers).json()
            for item in article_datas['data']:
                bid = repos['rid']
                title = item['title']  # 文章标题
                desc = item['description']
                slug = item['slug']
                article_list.append(
                    {"bid": bid, "title": title, "desc": desc, "slug": slug, "repos_name": repos["repos_name"]})

        for item in article_list:
            per_article_data = requests.get(self.base_url + '/repos/' + str(item['bid']) + '/docs/' + item['slug'],
                                            headers=self.headers).json()
            posts_text = re.sub(r'\\n', "\n", per_article_data['data']['body'])
            result = re.sub(r'<a name="(.*)"></a>', "", posts_text)
            # all_datas.append({"title": item['title'], "content": result})
            yield result, item["repos_name"], item['title']

    def save_article(self, result, repos_name, title):
        """写入文章"""
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        dir_path = f"{self.data_path}/{repos_name}"
        filepath = dir_path + f"/{title}.md"
        dir_ret = os.path.exists(dir_path)
        if not dir_ret:
            os.makedirs(dir_path)
        exists_ret = os.path.exists(filepath)
        if exists_ret:
            os.remove(filepath)
        try:
            with open(filepath, 'a', encoding="utf-8") as fp:
                fp.writelines(result)
            print(f"[{current_time}]  {title} 写入完成")
        except Exception as e:
            print(f"[{current_time}]  {title} 写入失败")

    def main(self):
        self.get_user_info()
        repos_list = self.get_repos_data()
        gen_obj = self.get_article_data(repos_list)
        for item in gen_obj:
            self.save_article(item[0], item[1], item[2])


if __name__ == "__main__":
    yq = ExportYueQueDoc()
    yq.main()

5.运行实现文件

这里就不用ide了,毕竟没学过的人也不必特意安装个pycharm

PS E:\Desktop\pythonProject> python .\test.py

在这里插入图片描述

导出指定知识库所有内容

稍微修改一下代码
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 首先,您需要安装 Pythonmarkdown 库,然后您可以使用以下代码来批量markdown 格式的文件转换为 html 格式的文件: ``` import os import markdown # 遍历指定文件夹中的 markdown 文件 for file in os.listdir("path/to/markdown/files"): # 判断文件是否是 markdown 文件 if file.endswith(".md"): # 读取 markdown 文件内容 with open(file, "r") as f: content = f.read() # 使用 markdown 库将 markdown 格式转换为 html 格式 html = markdown.markdown(content) # 将 html 代码写入新文件 with open(file[:-3] + ".html", "w") as f: f.write(html) ``` 该代码会遍历 "path/to/markdown/files" 文件夹中的所有 markdown 文件,然后使用 markdown 库将它们转换为 html 代码,并将 html 代码写入新的 html 文件中。 ### 回答2: 使用Python批量Markdown文件导出为HTML文件的代码如下: ```python import os import markdown def convert_to_html(md_file): # 读取Markdown文件内容 with open(md_file, 'r', encoding='utf-8') as file: markdown_content = file.read() # 将Markdown内容转换为HTML html_content = markdown.markdown(markdown_content) # 修改文件后缀名为.html html_file = os.path.splitext(md_file)[0] + '.html' # 将HTML内容写入文件 with open(html_file, 'w', encoding='utf-8') as file: file.write(html_content) print(f'Successfully converted {md_file} to {html_file}') def batch_convert_to_html(md_folder): # 遍历文件夹下的所有Markdown文件 for root, dirs, files in os.walk(md_folder): for file in files: if file.endswith('.md'): md_file = os.path.join(root, file) convert_to_html(md_file) # 批量导出Markdown文件为HTML文件 md_folder = 'path/to/markdown/folder' batch_convert_to_html(md_folder) ``` 使用这段代码,首先我们定义了一个`convert_to_html`函数,该函数接收一个Markdown文件的路径作为参数。函数内部读取Markdown文件内容,并使用`markdown`模块将其转换为HTML内容。然后,我们修改文件后缀名为`.html`,并将HTML内容写入新文件中。 接下来,我们定义了`batch_convert_to_html`函数,该函数接收一个包含Markdown文件文件夹路径作为参数。函数内部使用`os.walk`方法遍历文件夹下的所有Markdown文件,并调用`convert_to_html`函数将其转换为HTML文件。 最后,我们设置了一个`md_folder`变量,指定包含Markdown文件文件夹路径,并调用`batch_convert_to_html`函数进行批量转换。你只需将`md_folder`变量修改为你的Markdown文件所在的文件夹路径即可。 ### 回答3: 使用Python批量导出Markdown格式文件为HTML文件的代码可以使用Python的标准库markdown和os模块。 首先,需要导入所需的模块: ``` import markdown import os ``` 在代码中,首先需要指定要处理的Markdown文件所在的文件夹和导出的HTML文件存放的文件夹: ``` input_folder = 'markdown_files_folder' # Markdown文件所在的文件夹 output_folder = 'html_files_folder' # 导出的HTML文件存放文件夹 ``` 然后,可以使用os模块的listdir函数获取指定文件夹下所有文件文件名: ``` file_names = os.listdir(input_folder) ``` 接下来,通过遍历上一步得到的文件名列表,使用markdown模块的markdown函数将Markdown文件转换为HTML格式的文本,并将结果写入对应的HTML文件: ``` for file_name in file_names: if file_name.endswith('.md'): # 构造输入和输出的文件路径 input_file = os.path.join(input_folder, file_name) output_file = os.path.join(output_folder, file_name.replace('.md', '.html')) # 读取Markdown文件内容 with open(input_file, 'r', encoding='utf-8') as f: markdown_text = f.read() # 转换为HTML格式 html_text = markdown.markdown(markdown_text) # 写入HTML文件 with open(output_file, 'w', encoding='utf-8') as f: f.write(html_text) ``` 以上就是使用Python批量导出Markdown格式文件为HTML文件的代码。通过遍历指定文件夹下的Markdown文件,将其逐个转换为HTML格式并写入到指定文件夹下的HTML文件中。请注意,上述代码中需要调整文件夹路径为实际使用的文件夹路径。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值