markdownify - HTML 转 Markdown

101 篇文章 0 订阅


一、关于 markdownify

markdownify 是一个将 HTML 转换为Markdown 的Python 工具包


安装

pip install markdownify

二、使用

将一些 HTML 转换为Markdown:

from markdownify import markdownify as md
md('<b>Yay</b> <a href="http://github.com">GitHub</a>')  # > '**Yay** [GitHub](http://github.com)'

指定要排除的标签:

from markdownify import markdownify as md
md('<b>Yay</b> <a href="http://github.com">GitHub</a>', strip=['a'])  # > '**Yay** GitHub'

…或指定要包含的标签:

from markdownify import markdownify as md
md('<b>Yay</b> <a href="http://github.com">GitHub</a>', convert=['b'])  # > '**Yay** GitHub'

三、选项

Markdownify支持以下选项:

  • strip

    要剥离的标签列表。此选项不能与 convert选项。

  • convert

    要转换的标签列表。此选项不能与 strip选项。

  • autolinks

    一个布尔值,指示何时是否应使用“自动链接”样式 标记a内容与其href匹配。默认为True

  • default_title

    一个布尔值,用于将链接的标题设置为其href,如果没有标题 给定。默认为False

  • heading_style

    定义标题应该如何转换。接受的值是ATXATX_CLOSEDSETEXTUNDERLINED(这是 SETEXT)。默认为UNDERLINED

  • bullets

    要使用的项目符号样式的可迭代(字符串、列表或元组)。如果 iterable只包含一个项目,无论多深都会被使用 列表是嵌套的。否则,项目符号将根据嵌套交替 级别。默认为'*+-'

  • strong_em_symbol

    在markdown中,*_都用于编码strong强调文本。选项可以选择这些符号中的任何一个 ASTERISK(默认)或UNDERSCORE分别。

  • sub_symbol, sup_symbol

    定义围绕<sub><sup>文本的字符。默认为 空字符串,因为这是非标准行为。可能是这样的 ~^导致~sub~^sup^。如果值开始 使用<并以>结尾,它被视为 HTML ,/是 在文本后面使用的字符串中插入<之后;这允许 指定<sub>在下标的输出中使用原始 HTML 例子。

  • newline_style

    定义在markdown中标记换行符(<br>)的样式。默认值 此选项的值SPACES将采用通常的两个空格和一个换行符, 而BACKSLASH会将换行符转换为\\n(一个反斜杠和一个 换行符)。虽然后一种约定是非标准的,但它通常是 许多口译员的首选和支持。

  • code_language

    定义所有<pre>部分应采用的语言。 如果页面上的所有代码都使用相同的编程语言并且 应注释为````python或类似。 默认为’'`(空字符串),可以是任何字符串。

  • code_language_callback

    当 HTML 代码包含以某种方式提供代码的pre标记时 语言,例如作为类,这个回调可以用来提取 语言标签并将其前缀转换为pre标签。 回调得到一个参数,一个美丽的汤对象,并返回 包含代码语言的字符串,或None。 使用类名作为代码语言的示例可以是:def callback(el): return el['class'][0] if el.has_attr('class') else None 默认为None

  • escape_asterisks

    如果设置为False,则不要在文本中将*转义为\*。 默认为True

  • escape_underscores

    如果设置为False,则不要在文本中_转义为\_。 默认为True

  • escape_misc

    如果设置为False,不要转义其他标点符号 有时在文本中具有Markdown意义。 默认为True

  • keep_inline_images_in

    当图像位于内部时,图像将转换为其替代文本 标题或表格单元格。如果一些内联图像应该转换为 Markdown图像相反,此选项可以设置为父标签列表 应该允许包含内联图像,例如['td']。 默认为空列表。

  • wrap,wrap_width

    如果wrap设置为True,则所有文本段落都包装在 wrap_width字符。默认为False80。 使用newline_style=BACKSLASH来保持段落中的换行符。

选项可以指定为markdownify函数的kwargs,也可以指定为 MarkdownConverter 子类 嵌套Options类。


四、转换BeautifulSoup 对象

from markdownify import MarkdownConverter

# Create shorthand method for conversion
def md(soup, **options):
    return MarkdownConverter(**options).convert_soup(soup)

五、创建自定义转换器

如果您有一个需要特殊转换的特殊用例,您可以 始终从MarkdownConverter继承并覆盖您想要的方法 改变。 处理名为abc的 HTML 的函数 convert_abc(self, el, text, convert_as_inline)并返回一个字符串 包含转换后的 HTML 。 该MarkdownConverter对象将根据 函数名称:

from markdownify import MarkdownConverter

class ImageBlockConverter(MarkdownConverter):
    """
    Create a custom MarkdownConverter that adds two newlines after an image
    """
    def convert_img(self, el, text, convert_as_inline):
        return super().convert_img(el, text, convert_as_inline) + '\n\n'

# Create shorthand method for conversion
def md(html, **options):
    return ImageBlockConverter(**options).convert(html)

from markdownify import MarkdownConverter

class IgnoreParagraphsConverter(MarkdownConverter):
    """
    Create a custom MarkdownConverter that ignores paragraphs
    """
    def convert_p(self, el, text, convert_as_inline):
        return ''

# Create shorthand method for conversion
def md(html, **options):
    return IgnoreParagraphsConverter(**options).convert(html)

六、命令行界面

使用markdownify example.html > example.md或从标准输入的管道输入 (cat example.html | markdownify > example.md)。

调用markdownify -h查看所有可用选项。 它们与上面列出的相同,并采用相同的参数。

markdownify -h

七、开发

要运行测试,linter 运行一次pip install tox,然后运行tox


2024-09-28(六)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI工程仔

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值