首页 > 解决方案 > 解析 HTML 文件并存储标题

问题描述

所以我有这个很长的 HTML 页面。我实际上将我的 .docx 文档转换为 HTML,因为我希望将所有标题和副标题存储在单独的文件中,因为稍后我想重现相同的文件(但删除一些内容左右)所以我的想法是我将解析 HTML 一次并存储它的所有标题和副标题,根据要求,我将只获取需要的那些。

有人可以指导我使用哪个库,还是有一种我可能不知道的更简单、更智能的方法?请指导我。

非常感谢。

一个例子可以看成:

`1    INTRODUCTION

      1.1  Purpose
           Some text for purposes

      1.2  Terminology
            Some text for Terminology

2    TESTING

      2.1  Dependencies
           Some text some text some text

     2.2  Testing Components
           Some text some text some text

     2.3   Test Architecture
           Some text some text some text  

我希望它们保存在不同的文件夹中,就像这些文件夹中存储的所有文本一样。只是从字面上复制和粘贴,但保持正确的文件夹和所有 HTML 内容。

  `/home/user/Projects/HTML_Parser
     ├── main.py/
     │   ├── __init__.py
     │   ├── db.py
     │   ├── schema.sql
     │   ├── auth.py
     │   ├── blog.py
     │   ├── templates/
     │   └── static/
     │       └── style.css
     ├── 1.INTRODUCTION/
     │   ├── 1.1Purpose
     │   └── 1.2Terminology
     └── 2.TESTING
     │   ├── 2.1Dependencies
     │   └── 2.2TestingComponents
     └── 2.3TestArchitecture `

标签: pythonpandasbeautifulsouphtml-parsingpython-docx

解决方案


我建议将 docx 转换为 html 不是从我的经验中提取标题和子标题的正确方法。由于我们正在处理.docx由不同作者创作的非结构化文档(),因此没有特定或定义的方式来识别标题下的子标题,除非作者在创建文档时将其明确定义为子标题。

在某些情况下,作者可能会选择将标题定义为Normal格式,Bold而不是将其定义为 a Heading,在某些情况下,作者可能会选择将其定义为Heading自身。

因此,为了简短起见,只有当作者在创建文档时对它们进行了适当的格式化时,您才能识别标题和子标题。我遇到过许多未完成此类格式化的情况,例如作者 Heading可能将其创建为Heading类型,而子标题将是应用于它的Normal类型。Bold因此,只有在格式正确的情况下,您才能找到标题和子标题,例如子标题的大小在所有情况下都小于标题。

即使在这种情况下,我也建议python-docx直接在.docx自身上使用包,因为如果作者以正确的格式定义了标题和子标题,它可以提取它们。

这个秘籍.docx将帮助您从包括表格、图像和文本(以及样式信息)中提取所有信息。您可以使用这段代码单独从中提取文本(标题和子标题)。

-> 在阅读完所有这些之后,如果您仍然倾向于从 docx 的 html 版本中提取信息,那么最好使用的包是beautifulsoup用于解析 html 文件并从中提取内容。您可以在此处找到示例答案。

更新: 正如我所见,由于您的文档具有目录(ToC),因此您可以直接从 html 或 docx 中提取 ToC,并在提取后进行一些结构化。这是我能想到的最好方法。

  1. 要从 html 中提取 ToC,您可以使用从 html 中提取 ToCBeautifulsoup的部分,然后构建提取的结构
  2. 要从 docx 中提取 ToC,您可以参考此链接

干杯!


推荐阅读