当前位置: 首页 > news >正文

启用Python将PDF/HTML转为Markdown的几种办法

在爬虫项目中,我们经常需要将PDF或HTML内容转换为更易处理的Markdown格式。以下是几种常用的方法:

1. 使用pdf2md (针对PDF转MD)

安装依赖

bash

pip install pdfminer.six python-docx markdown

PDF转Markdown函数

python

import io
from pdfminer.high_level import extract_text
from docx import Documentdef pdf_to_markdown(pdf_path, md_path=None):"""将PDF文件转换为Markdown格式:param pdf_path: PDF文件路径:param md_path: 输出的Markdown文件路径(可选):return: Markdown文本(如果md_path为None)"""# 提取PDF文本text = extract_text(pdf_path)# 简单清理和转换md_content = text.replace('\n\n', '\n').replace('\n', '  \n')if md_path:with open(md_path, 'w', encoding='utf-8') as f:f.write(md_content)return Nonereturn md_content

2. 使用html2text (针对HTML转MD)

安装

bash

pip install html2text

HTML转Markdown函数

python

import html2textdef html_to_markdown(html_content, md_path=None):"""将HTML内容转换为Markdown格式:param html_content: HTML字符串或文件路径:param md_path: 输出的Markdown文件路径(可选):return: Markdown文本(如果md_path为None)"""# 如果是文件路径则读取内容if isinstance(html_content, str) and html_content.endswith(('.html', '.htm')):with open(html_content, 'r', encoding='utf-8') as f:html_content = f.read()# 创建转换器h = html2text.HTML2Text()h.ignore_links = False  # 不忽略链接h.bypass_tables = False  # 转换表格h.mark_code = True  # 标记代码块md_content = h.handle(html_content)if md_path:with open(md_path, 'w', encoding='utf-8') as f:f.write(md_content)return Nonereturn md_content

3. 使用pypandoc (通用转换工具)

安装

bash

pip install pypandoc
# 还需要安装pandoc: https://pandoc.org/installing.html

通用转换函数

python

import pypandocdef convert_to_markdown(input_path, output_path=None, input_format=None):"""通用文档转换函数(支持PDF/HTML/DOCX等):param input_path: 输入文件路径:param output_path: 输出文件路径(可选):param input_format: 输入格式(如'html','pdf'), 自动检测:return: Markdown文本(如果output_path为None)"""# 自动检测格式if input_format is None:if input_path.endswith('.pdf'):input_format = 'pdf'elif input_path.endswith(('.html', '.htm')):input_format = 'html'elif input_path.endswith('.docx'):input_format = 'docx'else:input_format = 'markdown'# 转换选项extra_args = ['--wrap=none']  # 不自动换行# 执行转换output = pypandoc.convert_file(input_path, 'markdown', format=input_format,extra_args=extra_args)if output_path:with open(output_path, 'w', encoding='utf-8') as f:f.write(output)return Nonereturn output

4. 综合封装类

python

class DocumentConverter:def __init__(self):self.html_converter = html2text.HTML2Text()self.html_converter.ignore_links = Falseself.html_converter.bypass_tables = Falsedef convert(self, input_content, output_path=None, input_type='auto'):"""通用文档转换方法:param input_content: 输入内容(文件路径或字符串):param output_path: 输出路径(可选):param input_type: 输入类型(pdf/html/auto):return: Markdown内容(如果output_path为None)"""# 自动检测输入类型if input_type == 'auto':if isinstance(input_content, str):if input_content.lower().endswith('.pdf'):input_type = 'pdf'elif input_content.lower().endswith(('.html', '.htm')):input_type = 'html'elif input_content.lower().startswith('

使用示例

转换PDF

python

# PDF转MD
pdf_text = pdf_to_markdown('document.pdf', 'output.md')# 使用综合类
converter = DocumentConverter()
converter.convert('document.pdf', 'output.md')

转换HTML

python

# HTML字符串转MD
html_content = "

Title

Paragraph

" md_content = html_to_markdown(html_content)# HTML文件转MD html_to_markdown('page.html', 'page.md')# 使用综合类 converter = DocumentConverter() converter.convert('page.html', 'page.md')

注意事项

  1. PDF转换精度:PDF转Markdown通常会有格式损失,复杂排版可能无法完美转换

  2. HTML转换:html2text对复杂网页的支持有限,可能需要调整参数

  3. 依赖管理:pypandoc需要额外安装pandoc,但转换效果最好

  4. 编码问题:确保处理文件时使用正确的编码(通常是utf-8)

  5. 性能考虑:大文件转换可能消耗较多内存,可考虑分块处理

以上方法可以根据项目需求选择使用,对于简单的转换html2text和pdfminer足够,对于更复杂的需求建议使用pypandoc。

http://www.jsqmd.com/news/63820/

相关文章:

  • 20232416 2025-2026-1 《网络与系统攻防技术》实验八实验报告
  • 数据类型转换笔记
  • 2025年厦门五大实力强的税务师事务所推荐,专业税务服务企业
  • 2025年度郑州包装公司TOP5权威推荐:森一包装,甄选企业
  • PbootCMS 上一篇/下一篇调用:如何将“没有了”改为英文
  • PbootCMS上传文件大小限制(PbootCMS上传文件大小限制的全面解决方案)
  • 完整教程:springcloud:理解springsecurity安全架构与认证链路(二)RBAC 权限模型与数据库设计
  • 实用指南:面向多模态医学图像配准与分割的MambaMorph模型:基于状态空间建模的全流程分析与应用
  • MySQL 数据库知识点扫盲:从基础到核心,全面掌握关键特性
  • 闻气即知
  • 2025厦门税务师事务所TOP5权威推荐:实力口碑双优企业甄
  • 2025年流体输送安全设备五大推荐品牌解析:曼太柯产品质量可
  • 一站式在线图片工具箱:多功能、免安装的图像处理解决方案
  • 让数据处理更简单:一款完全在浏览器中运行的轻量级文件转换工具
  • 2025年光伏线束定制企业推荐:专业制造厂与加工厂综合排名解
  • 2025年上海注册公司服务哪家好?注册公司服务选哪家好?
  • 2025 --【J+S 二十连测】-- 第十七套 总结
  • AutoCAD 2021 下载安装激活 绘图新体验:修剪 / 延伸快速模式,复杂图纸处理更流畅
  • pbootcms模板后台编辑器无法上传图片提示:后端配置项没有正常加载,上传插件不能正常使用!
  • 待学知识点汇总
  • 2025年中国十大木门品牌排名:看哪家品牌口碑好?
  • FFmpeg开发笔记(九十一)基于Kotlin的Android直播开源框架RootEncoder
  • 2025年上海注册公司十大推荐,看看哪家服务专业?
  • pbootcms提示提交失败,请使用POST方式提交
  • 完整教程:C++之vector容器
  • PbootCMS数据库配置,修改为Mysql数据库,配置Mysql出错解决办法
  • 2025年五大北京陪诊公司权威盘点:从流程优化到情感支持的多维评估
  • pbootcms一个网站如何绑定两个域名
  • 源码、反码、补码的理解
  • 在.NET Core中巧妙处理日志:使用Serilog进行结构化日志记录