前言
写一个将html转换为markdown的python脚本。
Operating System: Ubuntu 22.04.4 LTS
参考文档
介绍
以下是一个使用Python将HTML转换为Markdown的脚本,基于成熟的html2text库实现:
#!/usr/bin/env python3
import html2text
import argparse
import sys
def html_to_markdown(html_content, **kwargs):
"""Convert HTML content to Markdown"""
handler = html2text.HTML2Text()
# 配置转换参数(可选)
handler.body_width = kwargs.get("body_width", 0) # 设置换行宽度(0表示不换行)
handler.ignore_links = kwargs.get("ignore_links", False)
handler.ignore_images = kwargs.get("ignore_images", False)
handler.mark_code = kwargs.get("mark_code", True)
return handler.handle(html_content)
def main():
parser = argparse.ArgumentParser(description="HTML to Markdown Converter")
parser.add_argument("-i", "--input", help="Input HTML file")
parser.add_argument("-o", "--output", help="Output Markdown file")
args = parser.parse_args()
try:
# 读取输入内容
if args.input:
with open(args.input, "r", encoding="utf-8") as f:
html_content = f.read()
else:
print("Enter HTML content (Ctrl+D to finish):")
html_content = sys.stdin.read()
# 执行转换
markdown_content = html_to_markdown(html_content)
# 输出结果
if args.output:
with open(args.output, "w", encoding="utf-8") as f:
f.write(markdown_content)
print(f"Successfully converted to {args.output}")
else:
print(markdown_content)
except Exception as e:
print(f"Error: {str(e)}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
使用说明
首先安装依赖库:
pip install html2text
基本使用方法:
# 转换文件 python html2md.py -i input.html -o output.md # 从标准输入读取 echo "<h1>Hello World</h1>" | python html2md.py # 交互式输入 python html2md.py (输入HTML内容后按Ctrl+D)
主要功能特性
支持多种输入方式:
- 文件输入
- 标准输入
- 命令行直接输入
可配置转换选项:
# 示例:配置转换参数 markdown_content = html_to_markdown( html_content, body_width=80, # 自动换行 ignore_links=True, # 忽略超链接 mark_code=False # 不标记代码块 )
支持保留以下HTML元素:
- 标题(h1-h6)
- 列表(有序/无序)
- 代码块
- 引用块
- 表格
- 图片链接
- 文本格式(粗体、斜体等)
注意事项
复杂HTML结构可能无法完美转换,特别是:
- 嵌套表格
- 复杂CSS样式
- JavaScript生成的内容
- 自定义HTML标签
对于需要更高精度转换的场景,可以:
- 调整html2text的配置参数
- 结合BeautifulSoup进行预处理
- 对转换结果进行后处理
建议在转换后人工检查格式是否符合预期
这个脚本提供了基础的HTML到Markdown的转换能力,可以处理大多数常见HTML元素的转换需求。对于更复杂的转换场景,可以考虑在现有基础上进行功能扩展。
结语
第二百八十四篇博文写完,开心!!!!
今天,也是充满希望的一天。