Beautiful Soup - 查找所有标题



本章将探讨如何使用BeautifulSoup在HTML文档中查找所有标题元素。HTML定义了从H1到H6的六种标题样式,每种样式的字体大小递减。不同的页面部分使用合适的标签,例如主标题、章节标题、主题等。让我们用两种不同的方法使用find_all()方法来提取HTML文档中的所有标题元素。

我们将使用以下HTML脚本(保存为index.html)作为本章代码示例中的基础:

<html>
   <head>
      <title>BeautifulSoup - Scraping Headings</title>
   </head>
   <body>
      <h2>Scraping Headings</h2>
      <b>The quick, brown fox jumps over a lazy dog.</b>
      <h3>Paragraph Heading</h3>
      <p>DJs flock by when MTV ax quiz prog.</p>
      <h3>List heading</h3>
      <ul>
         <li>Junk MTV quiz graced by fox whelps.</li>
         <li>Bawds jog, flick quartz, vex nymphs.</li>
      </ul>
   </body>
</html>

示例1

在这种方法中,我们收集解析树中的所有标签,并检查每个标签的名称是否在所有标题标签列表中找到。

from bs4 import BeautifulSoup

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

headings = ['h1','h2','h3', 'h4', 'h5', 'h6']
tags = soup.find_all()
heads = [(tag.name, tag.contents[0]) for tag in tags if tag.name in headings]
print (heads)

这里,headings是所有标题样式h1到h6的列表。如果标签的名称是其中任何一个,则该标签及其内容将被收集到名为heads的列表中。

输出

[('h2', 'Scraping Headings'), ('h3', 'Paragraph Heading'), ('h3', 'List heading')]

示例2

您可以将正则表达式传递给find_all()方法。看看下面的正则表达式。

re.compile('^h[1-6]$')

此正则表达式查找所有以h开头,h之后有一个数字,然后在数字之后结束的标签。让我们在下面的代码中将其用作find_all()方法的参数:

from bs4 import BeautifulSoup
import re

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

tags = soup.find_all(re.compile('^h[1-6]$'))
print (tags)

输出

[<h2>Scraping Headings</h2>, <h3>Paragraph Heading</h3>, <h3>List heading</h3>]
广告
© . All rights reserved.