python - 解析 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 `
解决方案
我建议将 docx 转换为 html 不是从我的经验中提取标题和子标题的正确方法。由于我们正在处理.docx
由不同作者创作的非结构化文档(),因此没有特定或定义的方式来识别标题下的子标题,除非作者在创建文档时将其明确定义为子标题。
在某些情况下,作者可能会选择将标题定义为Normal
格式,Bold
而不是将其定义为 a Heading
,在某些情况下,作者可能会选择将其定义为Heading
自身。
因此,为了简短起见,只有当作者在创建文档时对它们进行了适当的格式化时,您才能识别标题和子标题。我遇到过许多未完成此类格式化的情况,例如作者 Heading
可能将其创建为Heading
类型,而子标题将是应用于它的Normal
类型。Bold
因此,只有在格式正确的情况下,您才能找到标题和子标题,例如子标题的大小在所有情况下都小于标题。
即使在这种情况下,我也建议python-docx
直接在.docx
自身上使用包,因为如果作者以正确的格式定义了标题和子标题,它可以提取它们。
这个秘籍.docx
将帮助您从包括表格、图像和文本(以及样式信息)中提取所有信息。您可以使用这段代码单独从中提取文本(标题和子标题)。
-> 在阅读完所有这些之后,如果您仍然倾向于从 docx 的 html 版本中提取信息,那么最好使用的包是beautifulsoup
用于解析 html 文件并从中提取内容。您可以在此处找到示例答案。
更新: 正如我所见,由于您的文档具有目录(ToC),因此您可以直接从 html 或 docx 中提取 ToC,并在提取后进行一些结构化。这是我能想到的最好方法。
- 要从 html 中提取 ToC,您可以使用从 html 中提取 ToC
Beautifulsoup
的部分,然后构建提取的结构 - 要从 docx 中提取 ToC,您可以参考此链接
干杯!
推荐阅读
- python - 如何修复 Sagemath 中函数 mod 的错误?
- java - 使用 2D 数组测试用例编写 Java 问题的 Codingbat
- javascript - babel-loader 错误 - TypeError: val is not a function
- c# - 使用 XAML 制作列表视图数据模板
- google-app-engine - 当达到 Google 油门每日限制时,该限制是从过去 24 小时开始计算的,还是从午夜开始计算的?
- elasticsearch - Elasticsearch 强制执行错误的性能
- c# - 如何在 C# 中创建菜单
- html - 在 Outlook 中 HTML 查看谷歌日历
- r - 获得R中多个模型的均值和多个置信区间
- c++ - 在 SD 卡上读取和存储二进制 GPS 数据时出现问题