📜  提取目录python(1)

📅  最后修改于: 2023-12-03 15:39:51.205000             🧑  作者: Mango

提取目录 Python

在某些情况下,我们可能需要从大型文本或 HTML 文件中提取目录,以方便用户更快地找到自己感兴趣的内容。这篇文章将介绍一些 Python 库和代码来提取目录。

Beautiful Soup

Beautiful Soup 是一个 Python 包,用于从 HTML 和 XML 中提取数据。它能够构建一个解析树来遍历 HTML/XML 文档,从而帮助我们查找和提取指定元素。

首先,我们需要安装 Beautiful Soup:

pip install beautifulsoup4

假设我们有一个名为 example.html 的 HTML 文件,它看起来像这样:

<!DOCTYPE html>
<html>
<head>
	<title>Example HTML</title>
</head>
<body>
	<h1>Heading 1</h1>
	<p>Paragraph 1</p>
	<h2>Sub-heading 1</h2>
	<p>Paragraph 2</p>
	<h2>Sub-heading 2</h2>
	<p>Paragraph 3</p>
	<h3>Sub-sub-heading 1</h3>
	<p>Paragraph 4</p>
	<h3>Sub-sub-heading 2</h3>
	<p>Paragraph 5</p>
	<h1>Heading 2</h1>
	<p>Paragraph 6</p>
</body>
</html>

现在,让我们编写 Python 代码来提取该文件的目录:

from bs4 import BeautifulSoup

with open("example.html") as fp:
    soup = BeautifulSoup(fp, 'html.parser')

toc = []

# find all headings
for heading in soup.find_all(['h1', 'h2', 'h3']):
    toc.append((heading.name, heading.text))

# print table of contents
for level, title in toc:
    if level == 'h1':
        print(title)
    elif level == 'h2':
        print('    ' + title)
    elif level == 'h3':
        print('        ' + title)

输出将是:

Heading 1
    Sub-heading 1
    Sub-heading 2
        Sub-sub-heading 1
        Sub-sub-heading 2
Heading 2

我们首先使用 BeautifulSoup 库打开 example.html 文件,并生成一个 BeautifulSoup 对象 soup。然后,我们遍历整个文档,查找所有的标题元素 (h1h2h3)。对于每个找到的标题,我们将其级别和标题文字添加到 toc 列表中。最后,我们遍历 toc 列表并打印输出。

html_toc

html_toc 是一个小巧的 Python 库,它提供了一种简单的方法来生成文档目录。

首先,我们需要安装 html_toc 库:

pip install html_toc

现在,假设我们有一个名为 example.html 的 HTML 文件,我们可以使用以下代码来提取它的目录:

from html_toc import get_html_toc

with open('example.html') as fp:
    html = fp.read()

toc_html = get_html_toc(html)

print(toc_html)

输出将是:

<div class="toc">
<ul>
<li><a href="#heading-1">Heading 1</a>
<ul>
<li><a href="#sub-heading-1">Sub-heading 1</a></li>
<li><a href="#sub-heading-2">Sub-heading 2</a>
<ul>
<li><a href="#sub-sub-heading-1">Sub-sub-heading 1</a></li>
<li><a href="#sub-sub-heading-2">Sub-sub-heading 2</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#heading-2">Heading 2</a></li>
</ul>
</div>

我们首先使用 html_toc 库中的 get_html_toc 函数获取目录的 HTML。然后,我们可以将其嵌入到 HTML 页面中以提供导航条。如果您需要更多自定义选项,请查看 html_toc 的文档。

结论

提取目录是一项非常有用的任务,可以使用户更轻松地浏览页面。Python 常用的库和代码让这项任务变得非常简单和快捷。使用本文介绍的技术,您可以在不到几行代码的情况下轻松地提取目录。