首页 > 其他分享 >驯服幕布导出

驯服幕布导出

时间:2024-12-20 17:31:36浏览次数:7  
标签:驯服 导出 class content soup tag file find 幕布

幕布导出的html转md


想把幕布的笔记转移、备份,但被导出恶心坏了

尝试了一堆办法,遂决定自己写一个小工具

有参考这个 github,但进行了一些适用于自己笔记的改动

使用方式

  • 提前设置好笔记的一级和二级标题后导出为html
  • 调用代码 python mubu_converter.py XXX.html aim.md生成aim.md
from bs4 import BeautifulSoup, Tag
from markdownify import MarkdownConverter
import sys


class MubuConverter:
    def __init__(self, html_file: str):
        self.html_file = html_file

    def convert(self) -> str:
        # 读取 HTML 文件内容
        with open(self.html_file, 'r', encoding='utf-8') as file:
            html = file.read()

        # 解析 HTML
        soup = BeautifulSoup(html, 'html.parser')
        return self.convert_soup(soup)

    def convert_soup(self, soup: BeautifulSoup) -> str:
        # 转换 LaTeX 块
        for latex_tag in soup.find_all("span", attrs={"class": "formula", "data-raw": True}):
            annotation_tag = latex_tag.find("annotation")
            if annotation_tag and annotation_tag.string:
                latex_content = annotation_tag.string.strip()
                latex_tag.string = f'${latex_content}$'  # 添加美元符号用于 LaTeX 表达式
            else:
                latex_tag.string = ''  # 处理无效的 LaTeX 块
        
        # 处理粗体、下划线和高亮样式
        for bold_tag in soup.find_all(class_='bold'):
            bold_tag.insert_before("**")  # 插入开始的 Markdown 粗体符号
            bold_tag.insert_after("**")   # 插入结束的 Markdown 粗体符号

        for highlight_tag in soup.find_all(class_='highlight-yellow'):
            highlight_tag.insert_before("==")  # 插入高亮的 Markdown 符号
            highlight_tag.insert_after("==")    # 插入高亮的 Markdown 符号
        for underline_tag in soup.find_all(class_='underline'):
            underline_tag.insert_before("++")  # 插入下划线的 Markdown 符号
            underline_tag.insert_after("++")     # 插入下划线的 Markdown 符号

        # 整理图片标签
        for img_tag in soup.find_all("img"):
            img_src = img_tag.get('src')
            # 变成 Markdown 的图片标签
            new_tag = soup.new_tag('img', src=img_src)
            img_tag.replace_with(new_tag)


        # 处理 h1 标题
        for heading1_tag in soup.find_all("li", class_="node heading1"):
            content_tag = heading1_tag.find("div", class_="content")
            if content_tag:
                heading_text = content_tag.get_text(strip=True)
                print(f"处理 H1 标题: {heading_text}")

            # 将该标签变为 H1 标签,添加前缀 #
            heading1_tag.name = "h1"
            heading1_tag.insert_before(f"# {heading_text}")
            content_tag.clear()
        
        # 处理 h2 标题
        for heading1_tag in soup.find_all("li", class_="node heading2"):
            content_tag = heading1_tag.find("div", class_="content")
            if content_tag:
                heading_text = content_tag.get_text(strip=True)
                print(f"处理 H2 标题: {heading_text}")

            # 将该标签变为 H1 标签,添加前缀 #
            heading1_tag.name = "h1"
            heading1_tag.insert_before(f"## {heading_text}")
            content_tag.clear()

        # 处理class为codespan的标签,使其变为代码块
        for code_tag in soup.find_all("span", class_="codespan"):
            code_tag.insert_before("`")  # 插入开始的代码块符号
            code_tag.insert_after("`")   # 插入结束的代码块符号

        # 移除不必要的标签
        head_tag = soup.find("head")
        if type(head_tag) is Tag:
            head_tag.clear()

        # 移除class="tag"的文本的#号
        for tag_tag in soup.find_all("span", class_="tag"):
            tag_tag.string = tag_tag.string.replace("#", "", 1)


        # 删除 "以上内容整理于 幕布文档"
        publish_tag = soup.find("div", attrs={"class": "publish"})
        if type(publish_tag) is Tag:
            publish_tag.clear()

        # 使用 markdownify 转换解析后的内容到 Markdown
        md_content = MarkdownConverter(
            escape_underscores=False, escape_asterisks=False, bullets='-',).convert_soup(soup)

        # 清除多余的换行符
        md_content = md_content.lstrip()


        return md_content


if __name__ == "__main__":
    # 调用方式:
    # python mubu_converter.py <html_file_path> <output_file_path>
    if len(sys.argv) != 3:
        print("请提供 HTML 文件的路径和输出 Markdown 文件的路径。")
        sys.exit(1)

    html_file_path = sys.argv[1]
    output_file_path = sys.argv[2]

    mubu_to_md = MubuConverter(html_file_path)
    md_content = mubu_to_md.convert()

    # 将转换后的内容写入指定的 Markdown 文件
    with open(output_file_path, 'w', encoding='utf-8') as output_file:
        output_file.write(md_content)

    print(f"转换完成,输出文件: {output_file_path}")


标签:驯服,导出,class,content,soup,tag,file,find,幕布
From: https://www.cnblogs.com/lveway/p/18619663

相关文章

  • c4d动画怎么导出mp4视频,c4d动画视频格式设置!
    宝子们,今天来给大家讲讲C4D咋导出mp4视频的方法。通过用图文教程的形式给大家展示得明明白白的,让你能轻松理解和掌握,不管是理论基础,还是实际操作和技能技巧,都能学到,快速入门然后提升自己哦。 c4d动画MP4视频格式设置1、先把C4D的工程文件打开,然后按下键盘上的Ctrl+D,这时......
  • Django使用openpyxl实现数据的导入与导出
    将序列化后的数据导出成excel格式#导入依赖importiofromopenpyxlimportWorkbook#将格式化的数据导出为excel的方法defoutput_excel(data):#创建Excel工作簿wb=Workbook()ws=wb.activews.title="文件标题"#写入表头headers=......
  • 5、导出表
    5、导出表typedefstruct_IMAGE_EXPORT_DIRECTORY{DWORDCharacteristics;DWORDTimeDateStamp;WORDMajorVersion;WORDMinorVersion;DWORDName; //指向导出表的文件名DWORDBase; //导出函数的起始序号DWORD......
  • Python 解密 Navicat导出的数据库连接,Navicat数据库连接导入DBeaver。
    最近公司收到Navicat律师告知书,让停止使用Navicat,用了那么久的数据库连接工具,不得不换其他的。最终选择了开源的DBeaver。安装完DBeaver后,把Navicat导出的connections.ncx文件直接导入DBeaver。直接访问提示连接失败,因为connections.ncx文件里的密码都是加密的。如图: 网上找......
  • Finereport调用python服务进行大数据量导出
    Finereport调用python服务进行大数据量导出背景:在使用finereport过程中,我们发现在数据导出这块一直是一个瓶颈,闲来无事,思索一番,想出来一种场景来应对此问题。供各位大佬参考讨论,也欢迎其他大佬提供更好的解决方案。文笔较差,大佬见谅。废话不多说,直接上代码,案例。正文:首先......
  • 剪映草稿自动化批量导出教程,剪映草稿自动化导出
    如何批量自动导出草稿?1.首先打开芒果速剪 2.导出路径请自行选择文件夹,点击复制,3. 粘贴到统一路径点击保存按钮 4.这里填写导出的草稿数量 5.设置好后点击批量导出草稿6.开始自动化导出草稿,注意这个过程中不要动鼠标和键盘,注意事项:1.点击批量导出按钮后,请不要触......
  • 如何导出哔站视频字幕文件
    1.打开你想导出字幕的视频2.按F12右上角弹出开发工具选项,若未弹出则按Fn+F123.单击打开开发工具,进入开发页面4.打开字幕5.点击上方的网络,在搜索框中输入ai_subitile,下方弹出的文件中选第一个。若此时文件为弹出,则刷新视频页面,重新打开字幕重复第五步操作6.单击弹出......
  • vue导出.csv文件
    //安装papaparsenpmipapaparse--saveimport*asPapaparsefrom"papaparse";/***默认导出数据头部*贴别注意格式的问题,不然导出的.cvs文件和上传的.cvs文件解析出来的结果会不一样数组的长度必须保持一致,不够的用空字符站位,如红色部分*/constdefaultCvsDa......
  • SQL Server数据库数据的导入与导出
    不同数据库之间导数据flowchartLR右键单击需要导数据的数据库--点击-->任务--点击-->导出数据点击下一步选择数据源MicrosoftOLEDBProviderforSQLServerflowchartLR选择好数据源-->设置服务器名称-->选择使用SQLServer身份验证-->输入用户名和密码-->选择需要导......
  • docker批量导入导出镜像
    批量导入镜像cat>images-load.sh<<-"EOF"#!/bin/bash#在此处填写镜像文件的保存目录script_dir=$(cd$(dirname$0);pwd)IMAGE_DIR=($script_dir/images-tar)i=0forIMAGEin`ls$IMAGE_DIR`doecho-e"正在导入镜像\033[33m$IMAGE\033[0m"docke......